【发布时间】:2011-08-16 19:08:14
【问题描述】:
我正在开发一个 android appwidget,它在我尝试过的所有 android 版本(模拟器 1.5、1.6、2.3)中都能正常工作,但不是 2.1(物理设备,LG GT540 升级到 2.1)。我在三星 GT I5801 上对其进行了测试,使用 2.1 操作系统,并且它工作正常,可能是因为 2.1 版本的特定版本较旧(或者三星自己添加了修复程序)。
顺便说一句,我认为这是对我所指的确切错误的修复:
https://android.googlesource.com/platform/packages/apps/Settings/+/7be5137e12ba58cebae634f640379599acdb491a
这是一个讨论相同问题的旧线程: Android:NPE while trying to activityForResult with ACTION_APPWIDGET_PICK intent
当我尝试在主屏幕上加载小部件时(实际上是在我单击“小部件”按钮时发生),我收到以下错误:
应用程序设置(进程 com.android.settings)已停止 不料。请再试一次。
带有“强制关闭”按钮。
请参阅下面的 logcat 输出。顺便说一句,当我的 appwidget 尚未安装时,这不会发生,它也会发生在 2.1 模拟器上。
我到处搜索,有很多人提到这一点。开发人员,但主要是用户,一般的结论是这是 android 2.1 操作系统中的一个错误。例如,即使是 google 自己的地图 appwidget 也会导致此崩溃。
现在我知道有些 appwidget 在 2.1 上运行良好。所以必须有一个解决方法。我只是不知道是什么。我在这里阅读了有关 appwidget 需要多个小部件才能使其工作的建议(抱歉,我现在找不到链接)。我现在实际上有 2 个文本视图,但我也尝试了一个文本视图和一个图像按钮。两者都不起作用。
我当然可以避免 2.1,但我更希望这个 appwidget 可以在尽可能多的 android 版本上工作(我目前还不能升级我的 GT540),而且我不愿意接受失败。 :-)
Logcat 堆栈跟踪:
I/ActivityManager( 58): Starting activity: Intent { act=android.appwidget.action.APPWIDGET_PICK cmp=com.android.settings/.AppWidgetPickActivity (has extras) }
W/InputManagerService( 58): Window already focused, ignoring focus gain of: com.android.internal.view.IInputMethodClient$Stub$Proxy@44d5d458
D/AndroidRuntime( 229): Shutting down VM
W/dalvikvm( 229): threadid=3: thread exiting with uncaught exception (group=0x4001b188)
E/AndroidRuntime( 229): Uncaught handler: thread main exiting due to uncaught exception
E/AndroidRuntime( 229): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.android.settings/com.android.settings.AppWidgetPickActivity}: java.lang.NullPointerException
E/AndroidRuntime( 229): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2496)
E/AndroidRuntime( 229): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2512)
E/AndroidRuntime( 229): at android.app.ActivityThread.access$2200(ActivityThread.java:119)
E/AndroidRuntime( 229): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1863)
E/AndroidRuntime( 229): at android.os.Handler.dispatchMessage(Handler.java:99)
E/AndroidRuntime( 229): at android.os.Looper.loop(Looper.java:123)
E/AndroidRuntime( 229): at android.app.ActivityThread.main(ActivityThread.java:4363)
E/AndroidRuntime( 229): at java.lang.reflect.Method.invokeNative(Native Method)
E/AndroidRuntime( 229): at java.lang.reflect.Method.invoke(Method.java:521)
E/AndroidRuntime( 229): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860)
E/AndroidRuntime( 229): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)
E/AndroidRuntime( 229): at dalvik.system.NativeStart.main(Native Method)
E/AndroidRuntime( 229): Caused by: java.lang.NullPointerException
E/AndroidRuntime( 229): at com.android.settings.ActivityPicker$IconResizer.createIconThumbnail(ActivityPicker.java:364)
E/AndroidRuntime( 229): at com.android.settings.ActivityPicker$PickAdapter$Item.<init>(ActivityPicker.java:226)
E/AndroidRuntime( 229): at com.android.settings.AppWidgetPickActivity.putAppWidgetItems(AppWidgetPickActivity.java:185)
E/AndroidRuntime( 229): at com.android.settings.AppWidgetPickActivity.putInstalledAppWidgets(AppWidgetPickActivity.java:226)
E/AndroidRuntime( 229): at com.android.settings.AppWidgetPickActivity.getItems(AppWidgetPickActivity.java:207)
E/AndroidRuntime( 229): at com.android.settings.ActivityPicker.onCreate(ActivityPicker.java:98)
E/AndroidRuntime( 229): at com.android.settings.AppWidgetPickActivity.onCreate(AppWidgetPickActivity.java:63)
E/AndroidRuntime( 229): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
E/AndroidRuntime( 229): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2459)
E/AndroidRuntime( 229): ... 11 more
I/Process ( 58): Sending signal. PID: 229 SIG: 3
I/dalvikvm( 229): threadid=7: reacting to signal 3
I/dalvikvm( 229): Wrote stack trace to '/data/anr/traces.txt'
E/ActivityThread( 58): Failed to find provider info for android.server.checkin
E/Checkin ( 58): Error reporting crash: java.lang.IllegalArgumentException: Unknown URL content://android.server.checkin/crashes
W/ActivityManager( 58): Activity idle timeout for HistoryRecord{44c1fd30 com.android.settings/.AppWidgetPickActivity}
清单:
<?xml version="1.0" encoding="utf-8"?>
<manifest
xmlns:android="http://schemas.android.com/apk/res/android"
package="net.example.exampleapp"
android:versionCode="1"
android:versionName="1.0"
android:debuggable="true">
<uses-permission android:name="android.permission.INTERNET"></uses-permission>
<application
android:label="exampleapp">
<receiver
android:name="ExampleWidgetProvider" >
<intent-filter>
<action
android:name="android.appwidget.action.APPWIDGET_UPDATE" />
</intent-filter>
<meta-data
android:name="android.appwidget.provider"
android:resource="@xml/example_appwidget_info" />
</receiver>
</application>
<uses-sdk android:minSdkVersion="3" />
</manifest>
【问题讨论】:
-
@aseg,虽然您的 logcat 不是“方便”,但它需要回答您的问题。你还说其他网站也提到了这个错误。有链接吗?