0

我尝试了Android 10 中的一些文本 - 找不到处理 Intent 的活动,我可以显示应用程序正在正确安装 ui。在安装应用程序的同时,它本身也相当。

有什么方法可以显示应用内安装进度,完成后我可以手动打开应用吗?

任何支持都非常感谢。

@RequiresApi(Build.VERSION_CODES.LOLLIPOP)
    loadingUseCase.value = LoadingState.APK_UPDATE
    private suspend fun installCoroutine(apkUri: Uri) =
        withContext(Dispatchers.IO) {
            resolver.openInputStream(apkUri)?.use { apkStream ->
                val length =
                    DocumentFile.fromSingleUri(getApplication(), apkUri)?.length() ?: -1
                val params =
                    PackageInstaller.SessionParams(PackageInstaller.SessionParams.MODE_FULL_INSTALL)
                val sessionId = installer.createSession(params)
                val session = installer.openSession(sessionId)
                session.openWrite(NAME, 0, length).use { sessionStream ->
                    apkStream.copyTo(sessionStream)
                    session.fsync(sessionStream)
                }
                val intent = Intent(getApplication(), InstallReceiver::class.java)
                val pi = PendingIntent.getBroadcast(
                    getApplication(),
                    PI_INSTALL,
                    intent,
                    PendingIntent.FLAG_UPDATE_CURRENT
                )
                session.commit(pi.intentSender)
                session.close()
                loadingUseCase.value = LoadingState.COMPLETE
            }
        }
class InstallReceiver : BroadcastReceiver() {
    override fun onReceive(context: Context, intent: Intent) {
        val status = intent.getIntExtra(PackageInstaller.EXTRA_STATUS, -1)
        Log.e("ABC::", "status $status")
        when (status) {
            PackageInstaller.STATUS_PENDING_USER_ACTION -> {
                val activityIntent =
                    intent.getParcelableExtra<Intent>(Intent.EXTRA_INTENT)
                context.startActivity(activityIntent?.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK))
            }
            PackageInstaller.STATUS_SUCCESS -> {
                Log.e("ABC::", "received $status")
                ToneGenerator(AudioManager.STREAM_NOTIFICATION, 100)
                    .startTone(ToneGenerator.TONE_PROP_ACK)
            }
            else -> {
                val msg = intent.getStringExtra(PackageInstaller.EXTRA_STATUS_MESSAGE)
                Log.e("ABC::", "received $status and $msg")
            }
        }
    }
}
4

0 回答 0