【发布时间】:2011-11-23 16:35:18
【问题描述】:
我正在开发一个应用程序,其工作是清除浏览器历史记录。作为此过程的一部分,我将用户发送到浏览器的 APPLICATIONS_DETAILS_SETTINGS 屏幕,以便他们可以按下“强制停止”按钮,这将关闭当前在浏览器中打开的所有窗口。这是我用来打开浏览器包的应用程序详细信息活动的代码。
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
以前有没有人遇到过这样的事情?对我来说,找出需要捆绑并添加到 Intent 以使其在此设备上正确启动的最佳方法是什么?
我找到了 InstalledAppDetails 活动的源代码,it can be found here 但是我的例外中提到的行是 1:onCreate 之外和 2:空白。
有没有一种方法可以让我侦听手动打开此活动时触发的 Intent 并从中解压缩额外内容,以便我知道它们是什么,从而知道我需要向我的 Intent 添加什么?
【问题讨论】:
-
你能给我们这行吗? InstalledAppDetails.java:369
-
我的设备运行的操作系统版本为 2.3.4,我在这里找到源代码 grepcode.com/file/repository.grepcode.com/java/ext/… 根据第 369 行是空白的。它介于 onPause() 和 onAllSizesComputed() 之间
-
你确定是同一个版本吗?代码和你的应用?
-
好吧,考虑到它指向一个空白行,我几乎可以肯定它不是同一个版本。我知道我的设备在 2.3.4 上,这是我能找到的 2.3.4 的唯一源代码。此外,android.git.kernel.org 似乎由于某种原因已关闭,这使得尝试找到不同版本的源代码变得更加困难。
标签: android android-intent settings