{"_id":"@ahmed-sarmoum/capacitor-apk-installer","_rev":"3-eded6c767d911cc7b2ed85265b6cfb63","name":"@ahmed-sarmoum/capacitor-apk-installer","dist-tags":{"latest":"1.0.2"},"versions":{"1.0.0":{"name":"@ahmed-sarmoum/capacitor-apk-installer","version":"1.0.0","keywords":["capacitor","plugin","native"],"author":{"name":"SIG Service"},"license":"MIT","_id":"@ahmed-sarmoum/capacitor-apk-installer@1.0.0","maintainers":[{"name":"ahmed-sarmoum","email":"sarmoumahmed@gmail.com"}],"homepage":"https://github.com/Ahmed-Sarmoum/capacitor-apk-installer#readme","bugs":{"url":"https://github.com/Ahmed-Sarmoum/capacitor-apk-installer/issues"},"dist":{"shasum":"01bab94868b0e2247b0679d836df356be854c6a8","tarball":"https://registry.npmjs.org/@ahmed-sarmoum/capacitor-apk-installer/-/capacitor-apk-installer-1.0.0.tgz","fileCount":27,"integrity":"sha512-og3EDmnq06jaasv2WunbtfXFmRfB+faHtXInpMHJNs/Qy5NN77OhmJNeHZbuzI278+LM5zopxztki7bbr/G/PA==","signatures":[{"sig":"MEUCIQDZ4N/m5EE4Mmw37XXRzMTJTHhDxSOK5xHY4UjhmM2f9wIgInjGLSB8AxlLv31DGfqotEjU0xEzRotzd4KM1DE3BDI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":213236},"main":"dist/plugin.cjs.js","types":"dist/esm/index.d.ts","unpkg":"dist/plugin.js","module":"dist/esm/index.js","gitHead":"20ff2ad66b802deaab1cf3be18456b34fd5eac9f","scripts":{"fmt":"npm run eslint -- --fix && npm run prettier -- --write && npm run swiftlint -- --fix --format","lint":"npm run eslint && npm run prettier -- --check && npm run swiftlint -- lint","build":"npm run clean && npm run docgen && tsc && rollup -c rollup.config.mjs","clean":"rimraf ./dist","watch":"tsc --watch","docgen":"docgen --api ApkFilesPlugin --output-readme README.md --output-json dist/docs.json","eslint":"eslint . --ext ts","verify":"npm run verify:ios && npm run verify:android && npm run verify:web","prettier":"prettier \"**/*.{css,html,ts,js,java}\" --plugin=prettier-plugin-java","swiftlint":"node-swiftlint","verify:ios":"xcodebuild -scheme ApkFiles -destination generic/platform=iOS","verify:web":"npm run build","prepublishOnly":"npm run build","verify:android":"cd android && ./gradlew clean build test && cd .."},"_npmUser":{"name":"ahmed-sarmoum","email":"sarmoumahmed@gmail.com"},"prettier":"@ionic/prettier-config","capacitor":{"ios":{"src":"ios"},"android":{"src":"android"}},"swiftlint":"@ionic/swiftlint-config","repository":{"url":"git+https://github.com/Ahmed-Sarmoum/capacitor-apk-installer.git","type":"git"},"_npmVersion":"10.9.3","description":"Check for new versions apks in the downloads folder","directories":{},"_nodeVersion":"22.20.0","eslintConfig":{"extends":"@ionic/eslint-config/recommended"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^8.57.0","rimraf":"^6.0.1","rollup":"^4.30.1","prettier":"^3.4.2","swiftlint":"^2.0.0","typescript":"~5.9.3","@capacitor/ios":"^7.0.0","@capacitor/core":"^7.0.0","@capacitor/docgen":"^0.3.0","@capacitor/android":"^7.0.0","@ionic/eslint-config":"^0.4.0","prettier-plugin-java":"^2.6.6","@ionic/prettier-config":"^4.0.0","@ionic/swiftlint-config":"^2.0.0"},"peerDependencies":{"@capacitor/core":">=7.0.0"},"_npmOperationalInternal":{"tmp":"tmp/capacitor-apk-installer_1.0.0_1771152944819_0.530300042971598","host":"s3://npm-registry-packages-npm-production"}},"1.0.1":{"name":"@ahmed-sarmoum/capacitor-apk-installer","version":"1.0.1","keywords":["capacitor","plugin","native"],"author":{"name":"SIG Service"},"license":"MIT","_id":"@ahmed-sarmoum/capacitor-apk-installer@1.0.1","maintainers":[{"name":"ahmed-sarmoum","email":"sarmoumahmed@gmail.com"}],"homepage":"https://github.com/Ahmed-Sarmoum/capacitor-apk-installer#readme","bugs":{"url":"https://github.com/Ahmed-Sarmoum/capacitor-apk-installer/issues"},"dist":{"shasum":"084e704949964875dff915af8e51fb8f778ad3d5","tarball":"https://registry.npmjs.org/@ahmed-sarmoum/capacitor-apk-installer/-/capacitor-apk-installer-1.0.1.tgz","fileCount":27,"integrity":"sha512-yQesBUfFJuHLQ4D86UOQrLVrPrTBLBjX1pFf0CgVfcmX9fzMC1aw3fGf/x1AKF2uPvl6q7kkMXcD/jMjbsi5aQ==","signatures":[{"sig":"MEYCIQCBbyvC0Czww/cd+goJxKAYqnY/m70Sqz0VlSRMuwLCggIhALnlq0GhleyxLnT7n9sqDQHd550UuqLoMbP3WbHYHEuY","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":213197},"main":"dist/plugin.cjs.js","_from":"file:ahmed-sarmoum-capacitor-apk-installer-1.0.1.tgz","types":"dist/esm/index.d.ts","unpkg":"dist/plugin.js","module":"dist/esm/index.js","scripts":{"fmt":"npm run eslint -- --fix && npm run prettier -- --write && npm run swiftlint -- --fix --format","lint":"npm run eslint && npm run prettier -- --check && npm run swiftlint -- lint","build":"npm run clean && npm run docgen && tsc && rollup -c rollup.config.mjs","clean":"rimraf ./dist","watch":"tsc --watch","docgen":"docgen --api ApkFilesPlugin --output-readme README.md --output-json dist/docs.json","eslint":"eslint . --ext ts","verify":"npm run verify:ios && npm run verify:android && npm run verify:web","prettier":"prettier \"**/*.{css,html,ts,js,java}\" --plugin=prettier-plugin-java","swiftlint":"node-swiftlint","verify:ios":"xcodebuild -scheme ApkFiles -destination generic/platform=iOS","verify:web":"npm run build","verify:android":"cd android && ./gradlew clean build test && cd .."},"_npmUser":{"name":"ahmed-sarmoum","email":"sarmoumahmed@gmail.com"},"prettier":"@ionic/prettier-config","_resolved":"/private/var/folders/vb/4b5vwm6n1_s5m0rqbg11vvmc0000gn/T/34f26fbc9e520f5b060fe9705921be82/ahmed-sarmoum-capacitor-apk-installer-1.0.1.tgz","capacitor":{"ios":{"src":"ios"},"android":{"src":"android"}},"swiftlint":"@ionic/swiftlint-config","_integrity":"sha512-yQesBUfFJuHLQ4D86UOQrLVrPrTBLBjX1pFf0CgVfcmX9fzMC1aw3fGf/x1AKF2uPvl6q7kkMXcD/jMjbsi5aQ==","repository":{"url":"git+https://github.com/Ahmed-Sarmoum/capacitor-apk-installer.git","type":"git"},"_npmVersion":"10.9.3","description":"Check for new versions apks in the downloads folder","directories":{},"_nodeVersion":"22.20.0","eslintConfig":{"extends":"@ionic/eslint-config/recommended"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^8.57.0","rimraf":"^6.0.1","rollup":"^4.30.1","prettier":"^3.4.2","swiftlint":"^2.0.0","typescript":"~5.9.3","@capacitor/ios":"^7.0.0","@capacitor/core":"^7.0.0","@capacitor/docgen":"^0.3.0","@capacitor/android":"^7.0.0","@ionic/eslint-config":"^0.4.0","prettier-plugin-java":"^2.6.6","@ionic/prettier-config":"^4.0.0","@ionic/swiftlint-config":"^2.0.0"},"peerDependencies":{"@capacitor/core":">=7.0.0"},"_npmOperationalInternal":{"tmp":"tmp/capacitor-apk-installer_1.0.1_1771158616799_0.6328117928548906","host":"s3://npm-registry-packages-npm-production"}},"1.0.2":{"name":"@ahmed-sarmoum/capacitor-apk-installer","version":"1.0.2","description":"Check for new versions apks in the downloads folder","main":"dist/plugin.cjs.js","module":"dist/esm/index.js","types":"dist/esm/index.d.ts","unpkg":"dist/plugin.js","author":{"name":"SIG Service"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/Ahmed-Sarmoum/capacitor-apk-installer.git"},"bugs":{"url":"https://github.com/Ahmed-Sarmoum/capacitor-apk-installer/issues"},"keywords":["capacitor","plugin","native"],"devDependencies":{"@capacitor/android":"^7.0.0","@capacitor/core":"^7.0.0","@capacitor/docgen":"^0.3.0","@capacitor/ios":"^7.0.0","@ionic/eslint-config":"^0.4.0","@ionic/prettier-config":"^4.0.0","@ionic/swiftlint-config":"^2.0.0","eslint":"^8.57.0","prettier":"^3.4.2","prettier-plugin-java":"^2.6.6","rimraf":"^6.0.1","rollup":"^4.30.1","swiftlint":"^2.0.0","typescript":"~5.9.3"},"peerDependencies":{"@capacitor/core":">=7.0.0"},"prettier":"@ionic/prettier-config","swiftlint":"@ionic/swiftlint-config","eslintConfig":{"extends":"@ionic/eslint-config/recommended"},"capacitor":{"ios":{"src":"ios"},"android":{"src":"android"}},"scripts":{"verify":"npm run verify:ios && npm run verify:android && npm run verify:web","verify:ios":"xcodebuild -scheme ApkFiles -destination generic/platform=iOS","verify:android":"cd android && ./gradlew clean build test && cd ..","verify:web":"npm run build","lint":"npm run eslint && npm run prettier -- --check && npm run swiftlint -- lint","fmt":"npm run eslint -- --fix && npm run prettier -- --write && npm run swiftlint -- --fix --format","eslint":"eslint . --ext ts","prettier":"prettier \"**/*.{css,html,ts,js,java}\" --plugin=prettier-plugin-java","swiftlint":"node-swiftlint","docgen":"docgen --api ApkFilesPlugin --output-readme README.md --output-json dist/docs.json","build":"npm run clean && npm run docgen && tsc && rollup -c rollup.config.mjs","clean":"rimraf ./dist","watch":"tsc --watch"},"_id":"@ahmed-sarmoum/capacitor-apk-installer@1.0.2","homepage":"https://github.com/Ahmed-Sarmoum/capacitor-apk-installer#readme","_integrity":"sha512-tYxbk5FW8qjWt805Q9yYK2eqVmM0cAK2odk0POV3Q0BjPmyzfIW8+ihzFQU84d6Rq3mJ/PMd4YfjMmg4e0n3bw==","_resolved":"/private/var/folders/vb/4b5vwm6n1_s5m0rqbg11vvmc0000gn/T/46b1b948407167f62f47c3892965302d/ahmed-sarmoum-capacitor-apk-installer-1.0.2.tgz","_from":"file:ahmed-sarmoum-capacitor-apk-installer-1.0.2.tgz","_nodeVersion":"22.20.0","_npmVersion":"10.9.3","dist":{"integrity":"sha512-tYxbk5FW8qjWt805Q9yYK2eqVmM0cAK2odk0POV3Q0BjPmyzfIW8+ihzFQU84d6Rq3mJ/PMd4YfjMmg4e0n3bw==","shasum":"69d66b2f5618a0bc44e3ba3591dcb7fdbc9a013b","tarball":"https://registry.npmjs.org/@ahmed-sarmoum/capacitor-apk-installer/-/capacitor-apk-installer-1.0.2.tgz","fileCount":28,"unpackedSize":213450,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQC5ecw+tFh47bd2rfKgHHWkrGZZiGwAE1KyUSxdSrQqzgIgKoG8cBybtki38a6U8wNbWNBP2EXRSDiKnkuhbpVzg3I="}]},"_npmUser":{"name":"ahmed-sarmoum","email":"sarmoumahmed@gmail.com"},"directories":{},"maintainers":[{"name":"ahmed-sarmoum","email":"sarmoumahmed@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/capacitor-apk-installer_1.0.2_1774281988364_0.9029371312192254"},"_hasShrinkwrap":false}},"time":{"created":"2026-02-15T10:55:44.663Z","modified":"2026-03-23T16:06:28.630Z","1.0.0":"2026-02-15T10:55:44.978Z","1.0.1":"2026-02-15T12:30:16.949Z","1.0.2":"2026-03-23T16:06:28.512Z"},"bugs":{"url":"https://github.com/Ahmed-Sarmoum/capacitor-apk-installer/issues"},"author":{"name":"SIG Service"},"license":"MIT","homepage":"https://github.com/Ahmed-Sarmoum/capacitor-apk-installer#readme","keywords":["capacitor","plugin","native"],"repository":{"type":"git","url":"git+https://github.com/Ahmed-Sarmoum/capacitor-apk-installer.git"},"description":"Check for new versions apks in the downloads folder","maintainers":[{"name":"ahmed-sarmoum","email":"sarmoumahmed@gmail.com"}],"readme":"# apk-files\r\n\r\nCheck for new versions apks in the downloads folder\r\n\r\n## Install\r\n\r\n```bash\r\nnpm install apk-files\r\nnpx cap sync\r\n```\r\n\r\n## API\r\n\r\n<docgen-index>\n\n* [`listDownloadApks(...)`](#listdownloadapks)\n* [`listAllApks(...)`](#listallapks)\n* [`debugScan()`](#debugscan)\n* [`scanSpecificPath(...)`](#scanspecificpath)\n* [`requestAllFilesAccess()`](#requestallfilesaccess)\n* [`checkPermissions()`](#checkpermissions)\n* [`installApk(...)`](#installapk)\n* [`startDownloadListener()`](#startdownloadlistener)\n* [`stopDownloadListener()`](#stopdownloadlistener)\n* [`downloadApk(...)`](#downloadapk)\n* [`getDownloadStatus(...)`](#getdownloadstatus)\n* [`cancelDownload(...)`](#canceldownload)\n* [`deleteApk(...)`](#deleteapk)\n* [`startDownloadProgressListener(...)`](#startdownloadprogresslistener)\n* [`stopDownloadProgressListener()`](#stopdownloadprogresslistener)\n* [`addListener('downloadComplete', ...)`](#addlistenerdownloadcomplete-)\n* [`addListener('installationStarted', ...)`](#addlistenerinstallationstarted-)\n* [`addListener('downloadProgress', ...)`](#addlistenerdownloadprogress-)\n* [`removeAllListeners()`](#removealllisteners)\n* [Interfaces](#interfaces)\n\n</docgen-index>\r\n\r\n<docgen-api>\n<!--Update the source file JSDoc comments and rerun docgen to update the docs below-->\n\n### listDownloadApks(...)\n\n```typescript\nlistDownloadApks(options?: ListApksOptions | undefined) => Promise<ApkListResult>\n```\n\nList APK files found in the Downloads directories\n\n| Param         | Type                                                        | Description                  |\n| ------------- | ----------------------------------------------------------- | ---------------------------- |\n| **`options`** | <code><a href=\"#listapksoptions\">ListApksOptions</a></code> | - Optional filtering options |\n\n**Returns:** <code>Promise&lt;<a href=\"#apklistresult\">ApkListResult</a>&gt;</code>\n\n--------------------\n\n\n### listAllApks(...)\n\n```typescript\nlistAllApks(options?: ListApksOptions | undefined) => Promise<ApkListResult>\n```\n\nList all APK files on the device (including Downloads and other directories)\n\n| Param         | Type                                                        | Description                  |\n| ------------- | ----------------------------------------------------------- | ---------------------------- |\n| **`options`** | <code><a href=\"#listapksoptions\">ListApksOptions</a></code> | - Optional filtering options |\n\n**Returns:** <code>Promise&lt;<a href=\"#apklistresult\">ApkListResult</a>&gt;</code>\n\n--------------------\n\n\n### debugScan()\n\n```typescript\ndebugScan() => Promise<DebugScanResult>\n```\n\nDebug scan to check Download directories and their contents\n\n**Returns:** <code>Promise&lt;<a href=\"#debugscanresult\">DebugScanResult</a>&gt;</code>\n\n--------------------\n\n\n### scanSpecificPath(...)\n\n```typescript\nscanSpecificPath(options: ScanPathOptions) => Promise<ScanPathResult>\n```\n\nScan a specific directory path for APK files\n\n| Param         | Type                                                        | Description                  |\n| ------------- | ----------------------------------------------------------- | ---------------------------- |\n| **`options`** | <code><a href=\"#scanpathoptions\">ScanPathOptions</a></code> | - Path and filtering options |\n\n**Returns:** <code>Promise&lt;<a href=\"#scanpathresult\">ScanPathResult</a>&gt;</code>\n\n--------------------\n\n\n### requestAllFilesAccess()\n\n```typescript\nrequestAllFilesAccess() => Promise<PermissionResult>\n```\n\nRequest \"All Files Access\" permission (Android 11+)\n\n**Returns:** <code>Promise&lt;<a href=\"#permissionresult\">PermissionResult</a>&gt;</code>\n\n--------------------\n\n\n### checkPermissions()\n\n```typescript\ncheckPermissions() => Promise<PermissionsStatus>\n```\n\nCheck current permissions status\n\n**Returns:** <code>Promise&lt;<a href=\"#permissionsstatus\">PermissionsStatus</a>&gt;</code>\n\n--------------------\n\n\n### installApk(...)\n\n```typescript\ninstallApk(options: InstallApkOptions) => Promise<InstallResult>\n```\n\nInstall an APK file\n\n| Param         | Type                                                            | Description                           |\n| ------------- | --------------------------------------------------------------- | ------------------------------------- |\n| **`options`** | <code><a href=\"#installapkoptions\">InstallApkOptions</a></code> | - Installation options with file path |\n\n**Returns:** <code>Promise&lt;<a href=\"#installresult\">InstallResult</a>&gt;</code>\n\n--------------------\n\n\n### startDownloadListener()\n\n```typescript\nstartDownloadListener() => Promise<DownloadListenerResult>\n```\n\nStart listening for download completion events\r\nReturns a promise that resolves when listener is active\r\nFires 'downloadComplete' event when downloads finish\n\n**Returns:** <code>Promise&lt;<a href=\"#downloadlistenerresult\">DownloadListenerResult</a>&gt;</code>\n\n--------------------\n\n\n### stopDownloadListener()\n\n```typescript\nstopDownloadListener() => Promise<DownloadListenerResult>\n```\n\nStop listening for download completion events\n\n**Returns:** <code>Promise&lt;<a href=\"#downloadlistenerresult\">DownloadListenerResult</a>&gt;</code>\n\n--------------------\n\n\n### downloadApk(...)\n\n```typescript\ndownloadApk(options: DownloadApkOptions) => Promise<DownloadResult>\n```\n\nDownload an APK file using Android DownloadManager\n\n| Param         | Type                                                              | Description                                   |\n| ------------- | ----------------------------------------------------------------- | --------------------------------------------- |\n| **`options`** | <code><a href=\"#downloadapkoptions\">DownloadApkOptions</a></code> | - Download options including URL and filename |\n\n**Returns:** <code>Promise&lt;<a href=\"#downloadresult\">DownloadResult</a>&gt;</code>\n\n--------------------\n\n\n### getDownloadStatus(...)\n\n```typescript\ngetDownloadStatus(options: DownloadStatusOptions) => Promise<DownloadStatus>\n```\n\nGet the status of a download\n\n| Param         | Type                                                                    | Description            |\n| ------------- | ----------------------------------------------------------------------- | ---------------------- |\n| **`options`** | <code><a href=\"#downloadstatusoptions\">DownloadStatusOptions</a></code> | - Download ID to check |\n\n**Returns:** <code>Promise&lt;<a href=\"#downloadstatus\">DownloadStatus</a>&gt;</code>\n\n--------------------\n\n\n### cancelDownload(...)\n\n```typescript\ncancelDownload(options: CancelDownloadOptions) => Promise<CancelDownloadResult>\n```\n\nCancel an ongoing download\n\n| Param         | Type                                                                    | Description             |\n| ------------- | ----------------------------------------------------------------------- | ----------------------- |\n| **`options`** | <code><a href=\"#canceldownloadoptions\">CancelDownloadOptions</a></code> | - Download ID to cancel |\n\n**Returns:** <code>Promise&lt;<a href=\"#canceldownloadresult\">CancelDownloadResult</a>&gt;</code>\n\n--------------------\n\n\n### deleteApk(...)\n\n```typescript\ndeleteApk(options: DeleteApkOptions) => Promise<DeleteApkResult>\n```\n\nDelete an APK file from storage\n\n| Param         | Type                                                          | Description           |\n| ------------- | ------------------------------------------------------------- | --------------------- |\n| **`options`** | <code><a href=\"#deleteapkoptions\">DeleteApkOptions</a></code> | - File path to delete |\n\n**Returns:** <code>Promise&lt;<a href=\"#deleteapkresult\">DeleteApkResult</a>&gt;</code>\n\n--------------------\n\n\n### startDownloadProgressListener(...)\n\n```typescript\nstartDownloadProgressListener(options: DownloadProgressOptions) => Promise<DownloadProgressListenerResult>\n```\n\nStart monitoring download progress for a specific download\r\nFires 'downloadProgress' events with real-time progress updates\n\n| Param         | Type                                                                        | Description              |\n| ------------- | --------------------------------------------------------------------------- | ------------------------ |\n| **`options`** | <code><a href=\"#downloadprogressoptions\">DownloadProgressOptions</a></code> | - Download ID to monitor |\n\n**Returns:** <code>Promise&lt;<a href=\"#downloadprogresslistenerresult\">DownloadProgressListenerResult</a>&gt;</code>\n\n--------------------\n\n\n### stopDownloadProgressListener()\n\n```typescript\nstopDownloadProgressListener() => Promise<DownloadProgressListenerResult>\n```\n\nStop monitoring download progress\n\n**Returns:** <code>Promise&lt;<a href=\"#downloadprogresslistenerresult\">DownloadProgressListenerResult</a>&gt;</code>\n\n--------------------\n\n\n### addListener('downloadComplete', ...)\n\n```typescript\naddListener(eventName: 'downloadComplete', listenerFunc: (data: DownloadCompleteEvent) => void) => Promise<PluginListenerHandle>\n```\n\nAdd a listener for download completion events\n\n| Param              | Type                                                                                       | Description                       |\n| ------------------ | ------------------------------------------------------------------------------------------ | --------------------------------- |\n| **`eventName`**    | <code>'downloadComplete'</code>                                                            | - Event name ('downloadComplete') |\n| **`listenerFunc`** | <code>(data: <a href=\"#downloadcompleteevent\">DownloadCompleteEvent</a>) =&gt; void</code> | - Callback function               |\n\n**Returns:** <code>Promise&lt;<a href=\"#pluginlistenerhandle\">PluginListenerHandle</a>&gt;</code>\n\n--------------------\n\n\n### addListener('installationStarted', ...)\n\n```typescript\naddListener(eventName: 'installationStarted', listenerFunc: (data: InstallationEvent) => void) => Promise<PluginListenerHandle>\n```\n\nAdd a listener for installation events\n\n| Param              | Type                                                                               | Description                          |\n| ------------------ | ---------------------------------------------------------------------------------- | ------------------------------------ |\n| **`eventName`**    | <code>'installationStarted'</code>                                                 | - Event name ('installationStarted') |\n| **`listenerFunc`** | <code>(data: <a href=\"#installationevent\">InstallationEvent</a>) =&gt; void</code> | - Callback function                  |\n\n**Returns:** <code>Promise&lt;<a href=\"#pluginlistenerhandle\">PluginListenerHandle</a>&gt;</code>\n\n--------------------\n\n\n### addListener('downloadProgress', ...)\n\n```typescript\naddListener(eventName: 'downloadProgress', listenerFunc: (data: DownloadProgressEvent) => void) => Promise<PluginListenerHandle>\n```\n\nAdd a listener for download progress events\n\n| Param              | Type                                                                                       | Description                       |\n| ------------------ | ------------------------------------------------------------------------------------------ | --------------------------------- |\n| **`eventName`**    | <code>'downloadProgress'</code>                                                            | - Event name ('downloadProgress') |\n| **`listenerFunc`** | <code>(data: <a href=\"#downloadprogressevent\">DownloadProgressEvent</a>) =&gt; void</code> | - Callback function               |\n\n**Returns:** <code>Promise&lt;<a href=\"#pluginlistenerhandle\">PluginListenerHandle</a>&gt;</code>\n\n--------------------\n\n\n### removeAllListeners()\n\n```typescript\nremoveAllListeners() => Promise<void>\n```\n\nRemove all listeners for this plugin\n\n--------------------\n\n\n### Interfaces\n\n\n#### ApkListResult\n\n| Prop             | Type                   | Description                                |\n| ---------------- | ---------------------- | ------------------------------------------ |\n| **`files`**      | <code>ApkFile[]</code> | Array of APK files found                   |\n| **`count`**      | <code>number</code>    | Total count of files found                 |\n| **`filteredBy`** | <code>string</code>    | Package name used for filtering (if any)   |\n| **`onlyLatest`** | <code>boolean</code>   | Whether only latest versions were returned |\n\n\n#### ApkFile\n\n| Prop                 | Type                          | Description                                                                            |\n| -------------------- | ----------------------------- | -------------------------------------------------------------------------------------- |\n| **`name`**           | <code>string</code>           | File name                                                                              |\n| **`uri`**            | <code>string</code>           | Content URI of the file                                                                |\n| **`path`**           | <code>string</code>           | Absolute file path (may not be available on all Android versions)                      |\n| **`size`**           | <code>number</code>           | File size in bytes                                                                     |\n| **`lastModified`**   | <code>number</code>           | Last modified timestamp (milliseconds since epoch)                                     |\n| **`source`**         | <code>string</code>           | Source where the file was found (e.g., \"Downloads\", \"MediaStore_Downloads\", \"Storage\") |\n| **`appId`**          | <code>string</code>           | Package name / application ID                                                          |\n| **`apkVersionName`** | <code>string</code>           | Version name (e.g., \"1.0.0\")                                                           |\n| **`apkVersionCode`** | <code>string \\| number</code> | Version code (numeric version)                                                         |\n\n\n#### ListApksOptions\n\n| Prop             | Type                 | Description                                                                 |\n| ---------------- | -------------------- | --------------------------------------------------------------------------- |\n| **`appId`**      | <code>string</code>  | Filter results by package name (appId)                                      |\n| **`onlyLatest`** | <code>boolean</code> | If true, only returns the latest version of each app (based on versionCode) |\n\n\n#### DebugScanResult\n\n| Prop                       | Type                         | Description                                    |\n| -------------------------- | ---------------------------- | ---------------------------------------------- |\n| **`downloadDirectories`**  | <code>DirectoryInfo[]</code> | Information about scanned download directories |\n| **`hasStoragePermission`** | <code>boolean</code>         | Whether storage permission is granted          |\n| **`externalStorageState`** | <code>string</code>          | External storage state                         |\n\n\n#### DirectoryInfo\n\n| Prop              | Type                    | Description                        |\n| ----------------- | ----------------------- | ---------------------------------- |\n| **`path`**        | <code>string</code>     | Directory path                     |\n| **`exists`**      | <code>boolean</code>    | Whether directory exists           |\n| **`isDirectory`** | <code>boolean</code>    | Whether path is a directory        |\n| **`canRead`**     | <code>boolean</code>    | Whether directory is readable      |\n| **`totalFiles`**  | <code>number</code>     | Total number of files in directory |\n| **`apkCount`**    | <code>number</code>     | Number of APK files found          |\n| **`files`**       | <code>FileInfo[]</code> | List of files in directory         |\n| **`error`**       | <code>string</code>     | Error message if scan failed       |\n\n\n#### FileInfo\n\n| Prop                 | Type                 | Description                         |\n| -------------------- | -------------------- | ----------------------------------- |\n| **`name`**           | <code>string</code>  | File name                           |\n| **`isFile`**         | <code>boolean</code> | Whether it's a file (not directory) |\n| **`size`**           | <code>number</code>  | File size in bytes                  |\n| **`canRead`**        | <code>boolean</code> | Whether file is readable            |\n| **`isAPK`**          | <code>boolean</code> | Whether file is an APK              |\n| **`apkVersionName`** | <code>string</code>  | APK version name (if available)     |\n| **`apkVersionCode`** | <code>number</code>  | APK version code (if available)     |\n| **`appId`**          | <code>string</code>  | Package name (if available)         |\n\n\n#### ScanPathResult\n\n| Prop                  | Type                 | Description                     |\n| --------------------- | -------------------- | ------------------------------- |\n| **`scannedPath`**     | <code>string</code>  | Path that was scanned           |\n| **`pathExists`**      | <code>boolean</code> | Whether the path exists         |\n| **`pathIsDirectory`** | <code>boolean</code> | Whether the path is a directory |\n| **`pathCanRead`**     | <code>boolean</code> | Whether the path is readable    |\n\n\n#### ScanPathOptions\n\n| Prop             | Type                 | Description                                          |\n| ---------------- | -------------------- | ---------------------------------------------------- |\n| **`path`**       | <code>string</code>  | Directory path to scan                               |\n| **`appId`**      | <code>string</code>  | Filter results by package name                       |\n| **`onlyLatest`** | <code>boolean</code> | If true, only returns the latest version of each app |\n\n\n#### PermissionResult\n\n| Prop          | Type                 | Description                   |\n| ------------- | -------------------- | ----------------------------- |\n| **`granted`** | <code>boolean</code> | Whether permission is granted |\n| **`message`** | <code>string</code>  | Status message                |\n\n\n#### PermissionsStatus\n\n| Prop                            | Type                 | Description                                         |\n| ------------------------------- | -------------------- | --------------------------------------------------- |\n| **`hasStoragePermission`**      | <code>boolean</code> | Whether storage permission is granted               |\n| **`hasAllFilesAccess`**         | <code>boolean</code> | Whether \"All Files Access\" is granted (Android 11+) |\n| **`canRequestInstallPackages`** | <code>boolean</code> | Whether app can request package installs            |\n| **`sdkVersion`**                | <code>number</code>  | Android SDK version                                 |\n| **`readExternalStorage`**       | <code>boolean</code> | Whether READ_EXTERNAL_STORAGE is granted            |\n\n\n#### InstallResult\n\n| Prop          | Type                | Description                                                                                                                         |\n| ------------- | ------------------- | ----------------------------------------------------------------------------------------------------------------------------------- |\n| **`status`**  | <code>string</code> | Installation status \"installation_started\" - Intent launched successfully \"permission_required\" - Need to enable install permission |\n| **`message`** | <code>string</code> | Status message                                                                                                                      |\n| **`apkPath`** | <code>string</code> | Path of the APK concerned (only when permission_required)                                                                           |\n\n\n#### InstallApkOptions\n\n| Prop       | Type                | Description                   |\n| ---------- | ------------------- | ----------------------------- |\n| **`path`** | <code>string</code> | Absolute path to the APK file |\n\n\n#### DownloadListenerResult\n\n| Prop             | Type                 | Description                                  |\n| ---------------- | -------------------- | -------------------------------------------- |\n| **`listening`**  | <code>boolean</code> | Whether listener is active                   |\n| **`message`**    | <code>string</code>  | Status message                               |\n| **`sdkVersion`** | <code>number</code>  | Android SDK version (when starting listener) |\n\n\n#### DownloadResult\n\n| Prop             | Type                | Description                                   |\n| ---------------- | ------------------- | --------------------------------------------- |\n| **`downloadId`** | <code>number</code> | Download ID assigned by DownloadManager       |\n| **`fileName`**   | <code>string</code> | Filename being downloaded                     |\n| **`url`**        | <code>string</code> | URL being downloaded                          |\n| **`message`**    | <code>string</code> | Status message (deprecated, use other fields) |\n\n\n#### DownloadApkOptions\n\n| Prop              | Type                | Description                                |\n| ----------------- | ------------------- | ------------------------------------------ |\n| **`path`**        | <code>string</code> | URL of the APK file to download            |\n| **`title`**       | <code>string</code> | Title shown in download notification       |\n| **`description`** | <code>string</code> | Description shown in download notification |\n\n\n#### DownloadStatus\n\n| Prop                  | Type                | Description                                                                      |\n| --------------------- | ------------------- | -------------------------------------------------------------------------------- |\n| **`downloadId`**      | <code>number</code> | Download ID                                                                      |\n| **`status`**          | <code>string</code> | Status string: \"PENDING\", \"RUNNING\", \"PAUSED\", \"SUCCESSFUL\", \"FAILED\", \"UNKNOWN\" |\n| **`statusCode`**      | <code>number</code> | Status code (numeric)                                                            |\n| **`reason`**          | <code>number</code> | Reason code (for failures/pauses)                                                |\n| **`bytesDownloaded`** | <code>number</code> | Bytes downloaded so far                                                          |\n| **`bytesTotal`**      | <code>number</code> | Total bytes to download                                                          |\n| **`uri`**             | <code>string</code> | File URI (available when complete)                                               |\n| **`title`**           | <code>string</code> | Download title                                                                   |\n| **`progress`**        | <code>number</code> | Download progress percentage (0-100)                                             |\n\n\n#### DownloadStatusOptions\n\n| Prop             | Type                | Description          |\n| ---------------- | ------------------- | -------------------- |\n| **`downloadId`** | <code>number</code> | Download ID to check |\n\n\n#### CancelDownloadResult\n\n| Prop             | Type                 | Description                    |\n| ---------------- | -------------------- | ------------------------------ |\n| **`removed`**    | <code>boolean</code> | Whether download was removed   |\n| **`downloadId`** | <code>number</code>  | Download ID that was cancelled |\n\n\n#### CancelDownloadOptions\n\n| Prop             | Type                | Description           |\n| ---------------- | ------------------- | --------------------- |\n| **`downloadId`** | <code>number</code> | Download ID to cancel |\n\n\n#### DeleteApkResult\n\n| Prop          | Type                 | Description                           |\n| ------------- | -------------------- | ------------------------------------- |\n| **`deleted`** | <code>boolean</code> | Whether file was deleted successfully |\n| **`path`**    | <code>string</code>  | Path that was deleted                 |\n\n\n#### DeleteApkOptions\n\n| Prop       | Type                | Description                             |\n| ---------- | ------------------- | --------------------------------------- |\n| **`path`** | <code>string</code> | Absolute path to the APK file to delete |\n\n\n#### DownloadProgressListenerResult\n\n| Prop             | Type                 | Description                         |\n| ---------------- | -------------------- | ----------------------------------- |\n| **`listening`**  | <code>boolean</code> | Whether progress listener is active |\n| **`downloadId`** | <code>number</code>  | Download ID being monitored         |\n| **`message`**    | <code>string</code>  | Status message                      |\n\n\n#### DownloadProgressOptions\n\n| Prop             | Type                | Description            |\n| ---------------- | ------------------- | ---------------------- |\n| **`downloadId`** | <code>number</code> | Download ID to monitor |\n\n\n#### PluginListenerHandle\n\n| Prop         | Type                                      |\n| ------------ | ----------------------------------------- |\n| **`remove`** | <code>() =&gt; Promise&lt;void&gt;</code> |\n\n\n#### DownloadCompleteEvent\n\n| Prop             | Type                             | Description                                                  |\n| ---------------- | -------------------------------- | ------------------------------------------------------------ |\n| **`event`**      | <code>'download_complete'</code> | Event type                                                   |\n| **`downloadId`** | <code>number</code>              | Download ID that completed                                   |\n| **`timestamp`**  | <code>number</code>              | Timestamp when download completed (milliseconds since epoch) |\n| **`apkPath`**    | <code>string</code>              | APK file path (if available)                                 |\n\n\n#### InstallationEvent\n\nEvent fired when installation is triggered (after permission grant or directly)\n\n| Prop          | Type                                                        | Description                                                |\n| ------------- | ----------------------------------------------------------- | ---------------------------------------------------------- |\n| **`event`**   | <code>'installation_started' \\| 'installation_error'</code> | Event type: 'installation_started' or 'installation_error' |\n| **`status`**  | <code>'error' \\| 'installation_started'</code>              | Installation status                                        |\n| **`message`** | <code>string</code>                                         | Status message                                             |\n| **`path`**    | <code>string</code>                                         | Path of the APK being installed (optional)                 |\n\n\n#### DownloadProgressEvent\n\nEvent fired during download progress\r\nUpdates every ~500ms while download is active\n\n| Prop                  | Type                | Description                                                                     |\n| --------------------- | ------------------- | ------------------------------------------------------------------------------- |\n| **`downloadId`**      | <code>number</code> | Download ID being monitored                                                     |\n| **`bytesDownloaded`** | <code>number</code> | Bytes downloaded so far                                                         |\n| **`bytesTotal`**      | <code>number</code> | Total bytes to download                                                         |\n| **`progress`**        | <code>number</code> | Download progress percentage (0-100)                                            |\n| **`status`**          | <code>string</code> | Current download status: \"PENDING\", \"RUNNING\", \"PAUSED\", \"SUCCESSFUL\", \"FAILED\" |\n| **`statusCode`**      | <code>number</code> | Status code (numeric)                                                           |\n| **`error`**           | <code>string</code> | Error message (only present if status is \"FAILED\")                              |\n\n</docgen-api>\r\n","readmeFilename":"README.md"}