Я разрабатываю приложение для 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 Music) вызовут следующую ошибку:
Attempt to invoke virtual method 'boolean android.content.Intent.migrateExtraStreamToClipData()' on a null object reference
Я нашел несколько других обсуждений, связанных с этой проблемой здесь и здесь, которые предполагают, что это связано с сервисами Google Play, но, по-видимому, было исправлено много версий назад (все приложения обновлены на сегодняшний день). Есть ли у кого-нибудь представление о том, что может заставить одни приложения запускаться правильно, а другие нет?
Обновлено: как я указал выше, я знаю об исправлениях, которые обсуждались ранее, но все мои приложения (включая службы Google Play версии 12.8.74) обновлены, поэтому эти исправления не помогают.
Ваша версия Сервисов Google Play> = 9.4.0? (добавьте версию к вашему вопросу)
Да: сервисы Google Play версии 12.8.74
Возможный дубликат Intent.migrateExtraStreamToClipData () для ссылки на нулевой объект