我正在开发一个Android应用程序,该应用程序除其他外将在设备上启动其他应用程序。这是我要启动外部应用程序时使用的代码:
fun openApp(context: Context, appName: String, packageName: String) {
if (isAppInstalled(context, packageName))
if (isAppEnabled(context, packageName)) {
context.startActivity(context.packageManager.getLaunchIntentForPackage(packageName))
}
else
Toast.makeText(context, "$appName app is not enabled.", Toast.LENGTH_SHORT).show()
else
Toast.makeText(context, "$appName app is not installed.", Toast.LENGTH_SHORT).show()
}
private fun isAppInstalled(context: Context, packageName: String): Boolean {
val pm = context.packageManager
try {
pm.getPackageInfo(packageName, PackageManager.GET_ACTIVITIES)
return true
} catch (ignored: PackageManager.NameNotFoundException) {
}
return false
}
private fun isAppEnabled(context: Context, packageName: String): Boolean {
var appStatus = false
try {
val ai = context.packageManager.getApplicationInfo(packageName, 0)
if (ai != null) {
appStatus = ai.enabled
}
} catch (e: PackageManager.NameNotFoundException) {
e.printStackTrace()
}
return appStatus
}
}
某些应用将正常运行,而其他应用(例如Google Play音乐)将导致以下错误:
Attempt to invoke virtual method 'boolean android.content.Intent.migrateExtraStreamToClipData()' on a null object reference
我发现了与此问题here和here相关的其他讨论,这表明它与Google Play服务有关,但显然在许多版本中已得到修复(所有应用程序均已更新)。有谁对某些应用程序能够正常启动而不是其他应用程序具有任何见识?
编辑:如上所述,我知道上面已经讨论了这些修复程序,但是我的所有应用程序(包括版本12.8.74的Google Play服务)都已更新,因此这些修复程序无济于事。