下载完成时未收到DOWNLOAD_COMPLETE广播

问题描述 投票:0回答:1

我创建了一个具有更新功能的应用程序,我的应用程序现在能够检测更新并下载它,但是当下载完成后,DownloadReceiver 没有被触发,我不知道为什么

我有一个像这样的 AppUpdater 类:

class AppUpdater(private val context: Context) {
    private lateinit var apkUrl: String
    private var downloadId: Long = -1
    var isUpdateAvailable = mutableStateOf(false)

    val downloadManager: DownloadManager = context.getSystemService(DownloadManager::class.java)

    fun checkForUpdates() {
        HttpHandler.asyncHandle(Constant.UPDATE_URL, Constant.AUTHORIZATION_TOKEN, ::callback)
    }

    private fun callback(response: okhttp3.Response) {...}

    fun downloadApkFile() {
        val request = DownloadManager.Request(Uri.parse(apkUrl))
            .setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED)
            .addRequestHeader("Authorization", "Bearer ${Constant.AUTHORIZATION_TOKEN}")
            .addRequestHeader("Accept", "application/octet-stream")
            .setDestinationInExternalPublicDir(
                Environment.DIRECTORY_DOWNLOADS,
                "MyApp.apk"
            )
            .setAllowedOverMetered(true)
            .setAllowedOverRoaming(true)
        downloadId = downloadManager.enqueue(request)
    }

    inner class DownloadReceiver : BroadcastReceiver() {
        override fun onReceive(context: Context, intent: Intent) {
            Log.w("AppUpdater", "APK Download Complete")
            val id = intent.getLongExtra(DownloadManager.EXTRA_DOWNLOAD_ID, -1)
            if (id == downloadId) {...}
        }
    }
}

在 AndroidManifest.xml 中,我注册了这个接收器:

<receiver
    android:name=".AppUpdater$DownloadReceiver"
    android:exported="false">
    <intent-filter>
        <action android:name="android.intent.action.DOWNLOAD_COMPLETE" />
    </intent-filter>
</receiver>
android kotlin android-download-manager
1个回答
0
投票

我认为问题可能是你通过清单注册这个接收器,而android对这种的注册有限制,或者导出的标志可能设置为

false

首先尝试将此标志设置为

true
,如果这不能解决此问题,请尝试注册上下文。

© www.soinside.com 2019 - 2024. All rights reserved.