Android: list targetSdkVersion 更改导致:图标不可见,小部件不再工作,并且无法访问数据

标签 android android-widget android-manifest

我最近升级了我的 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):无法为广播 Intent { action=android.appwidget.action.APPWIDGET_UPDATE flags=0x4 comp= 启动应用程序 com.alt12.babybump/10078 {com.alt12.babybump/com.alt12.babybump.WidgetGirl}(有附加功能)}:过程很糟糕

我现有的小部件代码中有一个可能相关的可疑部分:

@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);
  }
 }

也许最麻烦的是:对于某些用户来说,sqlite 数据库不再可访问/写入,因此他们的数据不再可用。我确实向 list 添加了 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

就好像是更新导致了一个新的进程,它不能访问旧进程的数据,什么的。

感谢任何帮助!

最佳答案

这个组合搞砸了:

然后我添加了几个新目录,例如包含高分辨率版本图形的 drawable-hdpi-v4 和 drawable-long-hdpi-v4。

删除 drawable--v4 目录并将图形放入 drawable- 文件夹中..这将修复您的图形

关于其他错误..您检查过摩托罗拉 android 开发者论坛了吗?

关于Android: list targetSdkVersion 更改导致:图标不可见,小部件不再工作,并且无法访问数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2483848/

相关文章:

java - 访问内部类方法会导致 nullpointerException

android - 我在哪里定义我的 OnClickListener 以关闭 Android 中的自定义对话框 View ?

java - Picasso 图像加载后,Horizo​​ntalGridView/RecyclerView 滚动位置会重置

android - Android 上的 iOS UIStepper

android - onPageFinished 在 WebViewClient 中的 onReceivedError 之后被调用

java - 搜索栏小部件未启动可搜索 Activity

Android - 安装失败,消息为 : INSTALL_PARSE_FAILED_MANIFEST_MALFORMED

android - 如何在android中通过代码隐藏标题栏

android - 为什么这个安卓设备会放大文字?

Android SDK工具23.0.5自动添加appCompact并扩展ActionBarActivity