2011-09-23 61 views
1

我正在处理其清除浏览器历史记录的应用程序。作为该过程的一部分,我将用户发送到浏览器的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: [email protected] 
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。

这是从日志的原意时,这一活动是手动启动:

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:blank之外。

有没有一种方法可以侦听在手动打开此活动时触发的Intent,并从中解开其他附加组件,以便我知道它们是什么,从而我需要将其添加到我的意图中?

+0

你能给我们这一行吗? InstalledAppDetails.java:369 –

+0

我的设备运行的是OS 2.3.4版本,我在这里找到了源代码http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android-根据第369行的apps/2.3.4_r1/com/android/settings/applications/InstalledAppDetails.java#为空。它介于onPause()和onAllSizesComputed()之间 – FoamyGuy

+0

是否确定它是相同的版本?代码和你的应用程序? –

回答

0

我想删除setComponent()电话。不应该需要它(假设文档是正确的),并且调用setComponent()来获取不属于你的组件并不是一个好主意。操作字符串应该将其路由到适当的活动。

+0

删除setComponent()在所讨论的设备上具有相同的结果,并且在之前正常工作的所有其他设备上导致ActivityNotFoundException。 – FoamyGuy

相关问题