Я создаю проект библиотеки андроида, которому нужны некоторые статические ресурсы (изображения/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
в любом месте, где захочу получить какие-либо ресурсы?
Вы проверили связь, которую я предоставил в качестве решения. Это говорит: «Да, если вы знаете имя пакета вашей библиотеки», и есть рабочее решение. –
Я прочитал сообщение. Но я не могу получить доступ к объекту 'context', поэтому я не могу вызвать' getResources() .... '. – hguser
Я хотел бы подтвердить, где находится класс DataProvider? в проекте библиотеки или в проекте приложения –