Как получить доступ к ресурсам в проекте библиотеки Android - программирование
Подтвердить что ты не робот

Как получить доступ к ресурсам в проекте библиотеки Android

Я создаю проект библиотеки андроидов, для которого необходимы некоторые статические ресурсы (images/xml и т.д.).

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

Так как я помещаю ресурсы в папку assets. И я использую AssetManager для доступа к ресурсам:

public class DataProvider {
    byte[] getDrawableData(int num) {
        AssetManager am = Resources.getSystem().getAssets();
        InputStream is = null;
        try {
            is = am.open("t.jpg");
        } catch (IOException e) {
            return "".getBytes();
        }
        if (is != null) {
            Drawable dw = Drawable.createFromStream(is, null);
            Bitmap bm = ((BitmapDrawable) dw).getBitmap();
            ByteArrayOutputStream stream = new ByteArrayOutputStream();
            bm.compress(Bitmap.CompressFormat.JPEG, 100, stream);
            return stream.toByteArray();
        }

        return "".getBytes();
    }
}

Однако я получил ошибку: W/System.err(19583): java.io.FileNotFoundException: t.jpg

В чем проблема?


Как Sankar V сказал, что проект библиотеки не поддерживает исходные активы. Тогда Кажется, что я должен положить resurces в папку res.

Но я попытался использовать метод Resources.getSystem().getResources()...., который не может получить то, что я хочу. И люди говорили, что этот метод может получить ресурсы системного уровня, а не ресурсы уровня приложения.

Если это правда. Означает ли это, что я должен хранить ссылку объекта Context в любом месте, где хочу получить какие-либо ресурсы?

4b9b3361

Ответ 1

Тогда мне интересно, где я могу поместить эти ресурсы и как получить к ним доступ?

Из Android Doc

Библиотечные проекты не могут включать исходные активы

Инструменты не поддерживают использование исходных файлов ресурсов (сохраненных в каталоге assets/directory) в проекте библиотеки. Любые ресурсы ресурсов, используемые приложением, должны храниться в каталоге assets/application самого проекта приложения. Однако файлы ресурсов, сохраненные в каталоге res/, поддерживаются.

Ссылка на Документы: LibraryProjects

Решение: Как получить доступ к файлам ресурсов, сохраненным в res/каталоге проекта библиотеки из проекта приложения

Примечание.. Если вы хотите получить доступ к ресурсам из самого проекта библиотеки, добавьте ресурсы в res/ directory не в assets. Поскольку файлы в активах не будут связаны с файлом .jar. Вы можете получить доступ к нему, как обычно, используя ссылку, сгенерированную в файле R.java.

Пример:. Чтобы получить доступ к графическому изображению с возможностью использования

R.drawable.image_name

Означает ли это, что я должен хранить ссылку объекта Context в любом месте, где бы я ни находился, чтобы получить какие-либо ресурсы?

Действительно, вы должны иметь ссылку на контекст для доступа к ресурсам

Update:

Теперь проект библиотеки Android может быть сгенерирован как файл aar (Android Archive), который позволяет объединять файлы ресурсов, необходимые для проекта библиотеки, вместо старого файла jar (Java Archive), который позволяет вам связывать Java-классы.

Ответ 2

Или вы можете использовать Связанную папку в Eclipse и связать свою папку с ресурсами в новом проекте.