Следующий вопрос относится к версиям Android 6 и выше.
Я сделал некоторое кодирование, которое работает на всех устройствах, таких как motoG, Nexus, Pixel и т. д., но код выдает исключение SecurityException на устройствах Samsung.
Сообщение об исключении
UiAutomatorTestRunner: java.lang.SecurityException: невозможно найти приложение для вызывающего абонента android.app.ApplicationThreadProxy@a70d2 (pid = 25949) при получении настроек поставщика контента
Я попробовал поймать на Samsung Galaxy S5, и это сработало. Но для Samsung J7 это исключение также выбрасывается где-то еще в коде. Я не думаю, что добавление блока try catch является правильным подходом.
Код, в котором выдается исключение:
Намерение намерения = AndroidServicesUtil.getPackageManager().getLaunchIntentForPackage(packageName);
Стек исключений: >
java.lang.SecurityException: Unable to find app for caller android.app.ApplicationThreadProxy@123375c (pid=6375) when getting content provider settings
at android.os.Parcel.readException(Parcel.java:1621)
at android.os.Parcel.readException(Parcel.java:1574)
at android.app.ActivityManagerProxy.getContentProvider(ActivityManagerNative.java:4292)
at android.app.ActivityThread.acquireProvider(ActivityThread.java:6570)
at android.app.ContextImpl$ApplicationContentResolver.acquireProvider(ContextImpl.java:2388)
at android.content.ContentResolver.acquireProvider(ContentResolver.java:1505)
at android.provider.Settings$NameValueCache.lazyGetProvider(Settings.java:1431)
at android.provider.Settings$NameValueCache.getStringForUser(Settings.java:1505)
at android.provider.Settings$Secure.getStringForUser(Settings.java:8662)
at android.provider.Settings$Secure.getIntForUser(Settings.java:8732)
at android.provider.Settings$Secure.getInt(Settings.java:8722)
at android.app.ApplicationPackageManager.getHiddenList(ApplicationPackageManager.java:814)
at android.app.ApplicationPackageManager.isHidden(ApplicationPackageManager.java:859)
at android.app.ApplicationPackageManager.queryIntentActivitiesAsUser(ApplicationPackageManager.java:925)
at android.app.ApplicationPackageManager.queryIntentActivities(ApplicationPackageManager.java:907)
at android.app.ApplicationPackageManager.getLaunchIntentForPackage(ApplicationPackageManager.java:302)
at com.myclass.launchApp(SessionManager.java:595)
Может ли кто-нибудь помочь мне понять, почему исключение SecurityException выдается только на устройствах Samsung для версии Android> = 6.
Спасибо.
packageName
, которое вы передаете, недопустимо, хотя я ожидаю здесь другого сообщения об ошибке. Если этот код дает сбой для заведомо хороших имен пакетов, то вина ложится на Samsung (за изменение Android таким образом, что это сломалоgetLaunchIntentForPackage()
) и, возможно, на Google (за отсутствие тестового примера CTS, охватывающего этот сценарий, если устройство поставлялось с этим ошибка). - person CommonsWare   schedule 24.01.2018