我最近升级了我的 Android 应用程序以支持多种分辨率。以前,我的 Android.manifest 文件有一行:
为了支持多种密度和分辨率设备,我将其更改为:
<supports-screens
android:smallScreens="false"
android:normalScreens="true"
android:largeScreens="true"
android:anyDensity="true"
/>
<uses-sdk android:minSdkVersion="3" android:targetSdkVersion="4" />
然后我添加了几个新目录,例如 drawable-hdpi-v4 和 drawable-long-hdpi-v4,其中包括高分辨率版本的图形。就是这样。
自从发布此更新以来,已经有相当多的用户抱怨各种问题:
- 应用程序图标没有出现(我没有创建图标的高分辨率版本)
主屏幕小部件不再起作用,即使他们删除并重新添加它(此代码未随更新而更改)。我有一个用户向我发送了他们的错误日志,其中显示:
03-19 20:59:41.617 W/ActivityManager( 1854): Unable to launch app com.alt12.babybump/10078 for broadcast Intent { action=android.appwidget.action.APPWIDGET_UPDATE flags=0x4 comp={com.alt12.babybump/com.alt12.babybump.WidgetGirl} (has extras) }: process is bad
我现有的小部件代码中有一个可能相关的可疑部分:
@Override
public void onReceive(Context context, Intent intent) {
// v1.5 fix that doesn't call onDelete Action
final String action = intent.getAction();
if (AppWidgetManager.ACTION_APPWIDGET_DELETED.equals(action)) {
final int appWidgetId = intent.getExtras().getInt(
AppWidgetManager.EXTRA_APPWIDGET_ID,
AppWidgetManager.INVALID_APPWIDGET_ID);
if (appWidgetId != AppWidgetManager.INVALID_APPWIDGET_ID) {
this.onDeleted(context, new int[] { appWidgetId });
}
} else {
super.onReceive(context, intent);
}
}
也许最麻烦的是:the sqlite database is no longer accessible/writeable for some users so their data is no longer available
。我确实将WRITE_EXTERNAL_STORAGE
权限添加到清单中。这只发生在某些用户身上,而且往往是 HTC Eris 用户。在该错误日志中,我看到以下内容:
03-19 16:00:56.173 E/FlurryAgent( 4791): java.io.FileNotFoundException: /data/data/com.alt12.babybump/files/.flurryagent.-2333f5cb
03-19 16:00:56.173 E/FlurryAgent( 4791): at org.apache.harmony.luni.platform.OSFileSystem.open(OSFileSystem.java:231)
03-19 16:01:09.393 E/Database( 4791): sqlite3_open_v2("/data/data/com.alt12.babybump/databases/uitematmamad.db", &handle, 6, NULL) failed
03-19 16:01:09.393 W/System.err( 4791): android.database.sqlite.SQLiteException: unable to open database file
就好像更新导致了一个新进程,它无法访问旧进程的数据,或者其他什么。
任何帮助表示赞赏!