У меня есть виджет приложения, который показывает изображение.AppWidgetProvider берет ресурсы из неправильного пакета (только Lollipop)
Uri uri = Uri.parse("android.resource://" + packageName + "/" + resId);
rv = new RemoteViews(defaultPackageName, widgetLayout);
rv.setImageViewUri(R.id.image, uri);
Изображения сохраняются в разных пакетах под drawable
каталога, я получаю его идентификатор ресурса следующим образом:
Resources r = getPackageManager().getResourcesForApplication(otherPackage);
int resId = r.getIdentifier("image_1", "drawable", otherPackage);
Все работает правильно, пока image_1
не является XML растровый, который имеет android:src
тег:
<?xml version="1.0" encoding="utf-8"?>
<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
android:src="@drawable/pat1"
android:tileMode="repeat"/>
После долгих исследований, что я узнал, и то, что я пробовал:
Проблема возникает только в lollipop (5.0, 5.1 и т. Д.) И только в AppWidgetProvider (она работает правильно, если я использую этот ресурс внутри действия).
Это не работаю с другими методами, такими как:
rv.setImageViewBitmap(R.id.image, BitmapFactory.decodeResource(r, resId));
Он получает правильный идентификатор ресурса в
@drawable/pat1
, но принимая вытяжку с тем же идентификатором Реза из пакета по умолчанию. (Я проверил это вR.java
в обоих пакетах) Если ресурс с этим идентификатором отсутствует, он просто ничего не помещает внутриR.id.image
, а виджеты выглядят пустыми.Я попытался жёстко имя пакета в
image_1.xml
так:android:src="@com.other.package.name:drawable/pat1"
не было полезно.
Проблема возникает на реальных устройствах с разными ромами и пусковыми установками, а также на эмуляторе.
Надеюсь, что я был чист, и надеюсь, что кто-то столкнется с подобной проблемой и может поделиться решением или предложить дополнительные обходные пути.