应用程序内更新(立即)不重新启动应用程序

sj.*_*.94 11 android in-app-update google-play-core

面临即时应用程序更新模式的问题。成功完成应用程序更新后,一切都会关闭,并且不会重新启动应用程序。这就是问题所在。但android文档说:

全屏用户体验,要求用户更新并重新启动应用程序才能继续使用该应用程序。此用户体验最适合更新对于继续使用应用程序至关重要的情况。用户接受立即更新后,Google Play 会处理更新安装和应用重新启动。

implementation 'com.google.android.play:core:1.9.1'
implementation 'com.google.android.play:core-ktx:1.8.1'
Run Code Online (Sandbox Code Playgroud)

代码

class MainActivity : AppCompatActivity() {

    companion object {
        const val UPDATE_REQUEST_CODE = 112
        const val TAG = "MainActivity"
    }

    private var appUpdateManager: AppUpdateManager? = null

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        findViewById<TextView>(R.id.tv_text).text = "Version " + BuildConfig.VERSION_NAME

        // Returns an intent object that you use to check for an update.
        appUpdateManager = AppUpdateManagerFactory.create(this)
    }

    private val listener: InstallStateUpdatedListener =
        InstallStateUpdatedListener { installState ->
            if (installState.installStatus() == InstallStatus.DOWNLOADED) {
                // After the update is downloaded, show a notification
                // and request user confirmation to restart the app.
                Log.d(TAG, "An update has been downloaded")
            } else if (installState.installStatus() == InstallStatus.INSTALLED) {
                Log.d(TAG, "An update has been installed")
            }
        }

    override fun onStart() {
        super.onStart()
        checkAppVersionNew()
    }

    private fun checkAppVersionNew() {
        val appUpdateInfoTask = appUpdateManager!!.appUpdateInfo
        appUpdateInfoTask.addOnSuccessListener { result: AppUpdateInfo ->
            if (result.updateAvailability() == UpdateAvailability.UPDATE_AVAILABLE && result.isUpdateTypeAllowed(
                    AppUpdateType.IMMEDIATE
                )
            ) {
                try {
                    Log.d(TAG, "An update available")
                    appUpdateManager!!.startUpdateFlowForResult(
                        result,
                        AppUpdateType.IMMEDIATE,
                        this,
                        UPDATE_REQUEST_CODE
                    )
                } catch (e: SendIntentException) {
                    Log.d(TAG, "SendIntentException $e")
                    e.printStackTrace()
                }
            }
        }
    }

    override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
        super.onActivityResult(requestCode, resultCode, data)

        if (requestCode == UPDATE_REQUEST_CODE) {
            when (resultCode) {
                RESULT_OK -> {
                    Log.d(TAG, "Update success")
                }
                RESULT_CANCELED -> {
                    Log.d(TAG, "Update cancelled")
                }
                ActivityResult.RESULT_IN_APP_UPDATE_FAILED -> {
                    Log.d(TAG, "Update failed")
                }
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

小智 0

我遇到了这个问题,两天后我添加了

android:launchMode="singleTask"
Run Code Online (Sandbox Code Playgroud)

到启动器 Activity 我用了

ProcessPhoenix.triggerRebirth(this)
Run Code Online (Sandbox Code Playgroud)

来自 ProcessPhoenix 库 然后应用程序在更新后重新启动。