Intereting Posts

Получение ресурсов другого приложения

Предположим, у меня есть 2 приложения A и B.

Я хочу получить доступ к ресурсам (чертежи, изображения, строки) приложения B из приложения. Как мне это сделать?

Редактировать:

Вы также можете обозначить проект Android как проект библиотеки, который позволяет ему делиться с другими проектами, которые зависят от него. Когда проект Android обозначается как проект библиотеки, его нельзя установить на устройство.

Означает ли это, что я не могу использовать свою библиотеку на рынке Android? Моя цель – использовать ресурсы по умолчанию для приложения А, но также, если кто-то может загрузить приложение В и использовать его ресурсы.

Solutions Collecting From Web of "Получение ресурсов другого приложения"

Если вы являетесь разработчиком обоих приложений, правильным решением было бы, как отметили разработчики, создать проект библиотеки Android и поделиться им между приложениями.

Тем не менее, вы все равно можете получать доступ к ресурсам из другого приложения, даже если это не ваше приложение:

Resources res = context.getPackageManager().getResourcesForApplication("com.example.foo") 

Если оба приложения являются вашими собственными, и вы хотите связать эти ресурсы во время сборки:

Создайте проект библиотеки Android , поместите в него все необходимые ресурсы и обратитесь к нему из обоих приложений.


Редактируйте свое редактирование: вы можете использовать библиотеку на рынке Android. Вы просто не можете использовать его в одиночку (скомпилируйте его). Вы должны создать приложение, которое использует библиотеку. Когда вы создаете это приложение, весь необходимый контент в основном захватывается из библиотеки и копируется в ваш apk. Который вы можете поставить на рынок, как обычно.

Это не работает, если вы хотите получить доступ к ресурсам из приложения, которое загружается на устройство во время выполнения. Проект библиотеки объединяет все ресурсы при создании приложения, которое его использует. Ответ Питера Кнего является правильным при доступе во время выполнения.

Это возможно, если эти приложения являются вашими. Или вы можете использовать любую Android-библиотеку для обоих приложений. Если вы хотите, чтобы вы также создали свою собственную библиотеку Android для такого рода работ. Thnx.

Ответ Питера выше замечательный, но я хотел бы подробнее рассказать …

Когда вы управляете appA и appB и хотите получить доступный от appB, в то время как в appA, выполните следующие действия:

  1. Получите идентификатор drawable, когда в appB (например, R.drawable.iconInAppB )
  2. Затем в appA

     Resources res = context.getPackageManager().getResourcesForApplication("com.example.appB"); Drawable d = res.getDrawable(integer); //integer was what appB assigned to R.drawable.iconInAppB 

* Примечание. Целочисленный идентификатор, присвоенный R.drawable.iconInAppB , со временем изменится, поэтому не полагайтесь на hardcoding. Я сохраняю пары ключ-значение (String resourceName, int resourceId) в базе данных в appB и получаю доступ к ним с помощью поставщика контента.

Например, давайте получим строковый массив с идентификатором entryvalues_font_size из пакета com.android.settings

 String[] enries = null; try { // You can get PackageManager from the Context Resources res = getPackageManager().getResourcesForApplication("com.android.settings"); int resId = res.getIdentifier("entryvalues_font_size", "array", "com.android.settings"); if (resId != 0) { enries = res.getStringArray(resId); } } catch (PackageManager.NameNotFoundException e) { e.printStackTrace(); }