Доступ Assests из другого приложения?

Я добираюсь, много запросов в моем приложении для обеспечения пользовательских пакетов значков от BetterCut / Открывает Home. Путем это, кажется, работает, Вы, устанавливают BetterCut или Открывают Home, затем можно установить тонны этих свободных пакетов значка с рынка. После того, как установленный и те приложения (и другие приложения) будут опрашивать относительно тех пакетов значка и использовать значки.

Я хочу знать, как опросить приложения установки относительно папок актива, которые доступны. Я открыл несколько пакетов значка и проверил, что существует папка активов там, и они полны всего значка png файлы.

Я искал на здесь, другие сайты кода, Google, и т.д. но havn't нашел, что любой ведет.

ОБНОВЛЕНИЕ:

Из ответа ниже я написал некоторый код, чтобы попытаться перечислить файл из моего собственного каталога активов проектов, но это, кажется, не работает.

Resources r = this.getResources();
AssetManager a = r.getAssets();
String[] list = a.list("/");
Log.d("test", "Length of / is "+list.length);
for (String s : list) {
    Log.d("test", s);
}

Log.d("test", "Length of /assets is "+a.list("/assets").length);
Log.d("test", "Length of /assets/ is "+a.list("/assets/").length);
Log.d("test", "Length of /assets/ is "+a.list("/assets/").length);
Log.d("test", "Length of ./assets/ is "+a.list("./assets/").length);
Log.d("test", "Length of ./assets is "+a.list("./assets").length);

Это - вывод:

03-16 12:25:04.591: DEBUG/test(13526): Length of / is 6
03-16 12:25:04.591: DEBUG/test(13526): AndroidManifest.xml
03-16 12:25:04.591: DEBUG/test(13526): META-INF
03-16 12:25:04.591: DEBUG/test(13526): assets
03-16 12:25:04.591: DEBUG/test(13526): classes.dex
03-16 12:25:04.591: DEBUG/test(13526): res
03-16 12:25:04.591: DEBUG/test(13526): resources.arsc
03-16 12:25:04.614: DEBUG/test(13526): Length of /assets is 0
03-16 12:25:04.637: DEBUG/test(13526): Length of /assets/ is 0
03-16 12:25:04.661: DEBUG/test(13526): Length of /assets/ is 0
03-16 12:25:04.692: DEBUG/test(13526): Length of ./assets/ is 0
03-16 12:25:04.716: DEBUG/test(13526): Length of ./assets is 0

ОБНОВИТЕ 2 99% Вот!!!:

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

InputStream is = assetManager.open("test.png");

Я также попробовал это активом в Appliction 2 из Приложения 1, где путь к папке является/asset/icon/image.png:

InputStream is = assetManager.open("icon/image.png");

Затем я выяснил, что можно перечислить каталог в активах:

String[] list = assetManager.list("icons");

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

6
задан Cameron McBride 16 March 2010 в 20:23
поделиться

3 ответа

Чтобы получить базовую папку / assets , вам нужно использовать AssetsManager, чтобы перечислить каталог только с кавычками:

AssetManager am = this.getAssets();
String[] names = am.list("");

В списке будут некоторые дополнительные файлы: изображения, звуки, webkit, возможно, другие. Вы можете игнорировать эти каталоги, они являются частью каталога ресурсов фреймворка. Это цитата из groups.google.com :

В настоящее время менеджер активов объединяет каталог ресурсов из ресурсов платформы вместе с вашими собственными файлами {{1 }} помещены в "активы". Мы должны , вероятно, изменить это поведение (это было частью старой модели ресурсов / локализации ), но это не причиняет большого вреда , за исключением того, что вы увидеть больше файлов / каталогов в своих ресурсах , чем вы могли ожидать. Любой из ваших файлов , который совпадает с файлом в ресурсах инфраструктуры, будет использоваться вместо при доступе через ваш AssetManager.

Вы также можете указать подпапку внутри каталога ресурсов и не требовать никаких косых черт:

String[] names= am.list("subfolder");

Обратите внимание, что я не включил «/ assets» в имя файла. Наконец, один раз. у вас есть список файлов, в которые вы можете загрузить их, например:

InputStream in = am.open("file.png");

Он будет загружен в файл в папке базовых ресурсов. Или вы можете загрузить файл в подпапку следующим образом:

InputStream in = am.open("subfolder/file.png");

Если вам нужно загрузить эти png в Bitmap, вы также можете сделать следующее:

Bitmap bitmap = BitmapFactory.decodeStream(inputStream);
4
ответ дан 10 December 2019 в 02:46
поделиться

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

.

Во-вторых, есть два основных типа файлов, предоставляемых пользователем в .apk: необработанные ресурсы и структурированные ресурсы.

Первый - это просто произвольная иерархия файлов, которую можно получить с помощью http://developer.android.com/reference/android/content/res/AssetManager.html#open (java.lang.String)

Последние обрабатываются встроенными инструментами в структурированную таблицу, что позволяет им варьироваться в зависимости от конфигурации. Доступ к ним осуществляется с помощью ресурсов и связанных классов. Рисунки, строки, цвета и большинство других типов данных, которые вы извлекаете из .apk, обычно хранятся как ресурс, а не как актив.

Вы можете использовать инструмент aapt, чтобы увидеть все ресурсы в .apk: aapt dump resources

Наконец, если вы хотите прочитать данные из этих .apk, как насчет просмотра их информации о том, как создавать их? Это должно дать вам много базовой информации о том, как они устроены.

2
ответ дан 10 December 2019 в 02:46
поделиться

Объект Resources предоставляет вам доступ к активам. PackageManager может предоставить вам доступ к ресурсам для приложения.

3
ответ дан 10 December 2019 в 02:46
поделиться
Другие вопросы по тегам:

Похожие вопросы: