【问题标题】:AppWidgetProvider takes resources from wrong package (Lollipop only)AppWidgetProvider 从错误的包中获取资源(仅限 Lollipop)
【发布时间】:2016-04-20 11:47:25
【问题描述】:

我有一个显示图像的应用小部件。

Uri uri = Uri.parse("android.resource://" + packageName + "/" + resId);
rv = new RemoteViews(defaultPackageName, widgetLayout);
rv.setImageViewUri(R.id.image, uri);

图像存储在drawable 目录下的不同包中,我得到它的资源ID 如下:

Resources r = getPackageManager().getResourcesForApplication(otherPackage);
int resId = r.getIdentifier("image_1", "drawable", otherPackage);

image_1 是一个带有android:src 标签的xml 位图之前一切正常:

<?xml version="1.0" encoding="utf-8"?>
<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
        android:src="@drawable/pat1"
        android:tileMode="repeat"/>

经过长时间的研究,我发现了什么以及我尝试了什么:

  1. 该问题仅出现在棒棒糖(5.0、5.1 等...)中,并且仅出现在 AppWidgetProvider 中(如果我在活动中使用此资源,它可以正常工作)。

  2. 它既不适用于其他方法,例如:

    rv.setImageViewBitmap(R.id.image, BitmapFactory.decodeResource(r, resId));
    
  3. 它正在获取@drawable/pat1 的正确资源ID,但从默认包中获取具有相同资源ID 的drawable。 (我已经在两个包中的R.java 中检查过)如果没有具有该 ID 的资源,它只会在 R.id.image 中放置任何内容,并且小部件似乎是空白的。

  4. 我尝试像这样在image_1.xml 中硬编码包名:

    android:src="@com.other.package.name:drawable/pat1"
    

    没有帮助。

  5. 问题出现在具有不同 rom 和启动器的真实设备以及模拟器上。

我希望我很清楚,希望有人遇到类似的问题并可以分享解决方案或提出更多解决方法。

【问题讨论】:

    标签: android android-5.0-lollipop android-appwidget android-5.1.1-lollipop appwidgetprovider


    【解决方案1】:

    这似乎是 Lollipop 中的一个错误,所以我通过解决方法解决了这个问题。 我刚刚在我的所有包中创建了类似的布局,在每个布局内都有一个带有所需可绘制对象的 ImageView。 最后,我让我的 RemoteViews 从选定的布局中创建自己。

    RemoteViews rv = new RemoteViews(otherPackage, layoutResId);
    

    【讨论】:

      猜你喜欢
      • 2012-09-13
      • 2012-07-30
      • 1970-01-01
      • 2012-11-14
      • 2018-09-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多