Запуск InstalledAppDetails для определенного приложения вызывает принудительное закрытие - PullRequest
1 голос
/ 23 сентября 2011

Я работаю над приложением, задачей которого является очистка истории браузера. В рамках этого процесса я отправляю пользователя на экран APPLICATIONS_DETAILS_SETTINGS для браузера, чтобы он мог нажать кнопку «Force Stop», которая закроет все окна, которые в данный момент открыты в браузере. Это код, который я использую, чтобы открыть сведения о приложении для пакета браузера.

    killBrowserIntent = new Intent();
    killBrowserIntent.setAction("android.settings.APPLICATION_DETAILS_SETTINGS"); // I have tried "android.intentaction.VIEW" here as well.
    killBrowserIntent.setData(Uri.parse("package:com.android.browser"));
    ComponentName cn = new ComponentName("com.android.settings", "com.android.settings.applications.InstalledAppDetails");
    killBrowserIntent.setComponent(cn);

Это прекрасно работает на многих устройствах. Однако одно из устройств, которое я тестирую на этом, вызывает принудительное закрытие со следующим журналом:

09-23 08:21:26.231: INFO/ActivityManager(231): Starting: Intent { act=android.settings.APPLICATION_DETAILS_SETTINGS dat=package:com.android.browser cmp=com.android.settings/.applications.InstalledAppDetails } from pid 3497
09-23 08:04:23.833: INFO/ActivityManager(231): Start proc com.android.settings for activity com.android.settings/.applications.InstalledAppDetails: pid=3434 uid=1000 gids={1015, 3002, 3001, 3003, 2001, 1007, 3005}
09-23 08:04:23.843: WARN/InputManagerService(231): Window already focused, ignoring focus gain of: com.android.internal.view.IInputMethodClient$Stub$Proxy@407e4ec0
09-23 08:04:23.873: INFO/ActivityManager(231): No longer want com.motorola.android.deviceinformationprovider (pid 3124): hidden #21
09-23 08:04:23.893: WARN/dalvikvm(3434): Refusing to reopen boot DEX '/system/framework/com.motorola.android.frameworks.jar'
09-23 08:04:23.903: WARN/dalvikvm(3434): Refusing to reopen boot DEX '/system/framework/com.motorola.android.ptt.common.jar'
09-23 08:04:24.083: WARN/dalvikvm(3434): threadid=1: thread exiting with uncaught exception (group=0x4001e560)
09-23 08:04:24.083: ERROR/AndroidRuntime(3434): FATAL EXCEPTION: main
09-23 08:04:24.083: ERROR/AndroidRuntime(3434): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.android.settings/com.android.settings.applications.InstalledAppDetails}: java.lang.NullPointerException
09-23 08:04:24.083: ERROR/AndroidRuntime(3434):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1702)
09-23 08:04:24.083: ERROR/AndroidRuntime(3434):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1727)
09-23 08:04:24.083: ERROR/AndroidRuntime(3434):     at android.app.ActivityThread.access$1500(ActivityThread.java:124)
09-23 08:04:24.083: ERROR/AndroidRuntime(3434):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:974)
09-23 08:04:24.083: ERROR/AndroidRuntime(3434):     at android.os.Handler.dispatchMessage(Handler.java:99)
09-23 08:04:24.083: ERROR/AndroidRuntime(3434):     at android.os.Looper.loop(Looper.java:130)
09-23 08:04:24.083: ERROR/AndroidRuntime(3434):     at android.app.ActivityThread.main(ActivityThread.java:3859)
09-23 08:04:24.083: ERROR/AndroidRuntime(3434):     at java.lang.reflect.Method.invokeNative(Native Method)
09-23 08:04:24.083: ERROR/AndroidRuntime(3434):     at java.lang.reflect.Method.invoke(Method.java:507)
09-23 08:04:24.083: ERROR/AndroidRuntime(3434):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:889)
09-23 08:04:24.083: ERROR/AndroidRuntime(3434):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:647)
09-23 08:04:24.083: ERROR/AndroidRuntime(3434):     at dalvik.system.NativeStart.main(Native Method)
09-23 08:04:24.083: ERROR/AndroidRuntime(3434): Caused by: java.lang.NullPointerException
09-23 08:04:24.083: ERROR/AndroidRuntime(3434):     at com.android.settings.applications.InstalledAppDetails.onCreate(InstalledAppDetails.java:369)
09-23 08:04:24.083: ERROR/AndroidRuntime(3434):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
09-23 08:04:24.083: ERROR/AndroidRuntime(3434):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1666)
09-23 08:04:24.083: ERROR/AndroidRuntime(3434):     ... 11 more
09-23 08:04:24.083: WARN/ActivityManager(231):   Force finishing activity com.android.settings/.applications.InstalledAppDetails

Чтобы углубиться в это, я зашел в настройки-> Управление приложениями-> Браузер на устройстве вручную и заметил, что в Intent, который запускается таким образом, в него включены Extras.

Это строка Intent из журнала, когда это действие запускается вручную:

09-23 08:23:59.470: INFO/ActivityManager(231): Starting: Intent { act=android.settings.APPLICATION_DETAILS_SETTINGS dat=package:com.android.browser cmp=com.android.settings/.applications.InstalledAppDetails (has extras) } from pid 3540

Это строка намерений, когда она запускается из моего приложения:

09-23 08:21:26.231: INFO/ActivityManager(231): Starting: Intent { act=android.settings.APPLICATION_DETAILS_SETTINGS dat=package:com.android.browser cmp=com.android.settings/.applications.InstalledAppDetails } from pid 3497

Кто-нибудь сталкивался с чем-то подобным раньше? Каков наилучший способ для меня выяснить, что мне нужно собрать и добавить в намерение, чтобы оно правильно запускалось на этом устройстве?

Я нашел исходный код для действия InstalledAppDetails, его можно найти здесь Но в моем исключении указана строка 1: за пределами onCreate и 2: пусто.

Есть ли способ, которым я могу прослушать Intent, который запускается, когда это действие открывается вручную, и распаковывать дополнения из него, чтобы я знал, какие они есть, и, следовательно, что мне нужно добавить в Intent?

1 Ответ

0 голосов
/ 23 сентября 2011

Я бы удалил вызов setComponent().В этом нет необходимости (при условии, что документы правильные), и вызов setComponent() для компонента, который не принадлежит вам, редко является хорошей идеей.Одна только строка действия должна направить ее к соответствующему действию.

...