Я добираюсь, много запросов в моем приложении для обеспечения пользовательских пакетов значков от 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");
Это также работает отлично. Единственная вещь, переставшая работать прямо сейчас, состоит в том, как перечислить активы базового каталога.
Чтобы получить базовую папку / 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);
Вам, вероятно, следует получить базовый обзор того, как работают ресурсы и активы, прежде чем углубляться в детали. :)
.
Во-вторых, есть два основных типа файлов, предоставляемых пользователем в .apk: необработанные ресурсы и структурированные ресурсы.
Первый - это просто произвольная иерархия файлов, которую можно получить с помощью http://developer.android.com/reference/android/content/res/AssetManager.html#open (java.lang.String)
Последние обрабатываются встроенными инструментами в структурированную таблицу, что позволяет им варьироваться в зависимости от конфигурации. Доступ к ним осуществляется с помощью ресурсов и связанных классов. Рисунки, строки, цвета и большинство других типов данных, которые вы извлекаете из .apk, обычно хранятся как ресурс, а не как актив.
Вы можете использовать инструмент aapt, чтобы увидеть все ресурсы в .apk: aapt dump resources
Наконец, если вы хотите прочитать данные из этих .apk, как насчет просмотра их информации о том, как создавать их? Это должно дать вам много базовой информации о том, как они устроены.
Объект Resources
предоставляет вам доступ к активам. PackageManager
может предоставить вам доступ к ресурсам
для приложения.