2012-04-09 6 views
3

Я хотел бы знать - существуют ли способы доступа к ресурсам и/или файлам ресурсов Android (или файлам из любой другой папки) за пределами действия (без прохождения контекста)?Доступ Android к ресурсам за пределами деятельности

Не удается получить доступ без контекста:

getResources().getIdentifier("resource_name", "drawable", getPackageName()); 
getAssets().open("file_in_assets_folder_name"); 

Выдает исключение, если не в деятельности:

try { 
    Class class = R.drawable.class; 
    Field field = class.getField("resource_name"); 
    Integer i = new Integer(field.getInt(null)); 
} catch (Exception e) {} 

попытался также ниже, но сетует файл не существует (делать что-то здесь не так ?):

URL url = new URL("file:///android_asset/file_name.ext"); 
InputSource source = new InputSource(url.openStream()); 
//exception looks like so 04-10 00:40:43.382: W/System.err(5547): java.io.FileNotFoundException: /android_asset/InfoItems.xml (No such file or directory) 
+0

Я действительно не могу Понимаю. Вы хотите получить доступ к ресурсам андроида за пределами активности? Где вы, если не работаете? И какие именно ресурсы Android? Вы имеете в виду как предустановленные значки? – yoshi

+0

Вы в расширенном классе или в каком-то классе библиотеки, у которого нет доступа к контексту? –

+0

@Marc: Почему вы не хотите передавать контекст? – Squonk

ответ

5

Если папки включены в Путь сборки проекта, вы можете использовать ClassLoader доступ к файлам под ними вне android.content.Context, например, из POJO (в случае, если вы не хотите, чтобы передать ссылку на android.content.Context):

String file = "res/raw/test.txt"; 
InputStream in = this.getClass().getClassLoader().getResourceAsStream(file); 
  • В res папка включена в Project Build Path по умолчанию для всех версий Android SDK.
  • Папка активов была включена в Путь сборки проекта по умолчанию до Android SDK r14.

Чтобы добавить папки в Путь сборки проекта, щелкните правой кнопкой мыши проект - Путь сборки - Настройте путь сборки, добавьте свою папку (например, активы, если используете более позднюю версию SDK) в качестве исходной папки в пути сборки.

Проверьте аналогичный вопрос, который я ответил ранее, на here.

+0

Спасибо, это хорошо работает для доступа к файлу. Не могли бы вы также сказать, есть ли способ (без контекста) доступа к содержимому R.java? (мой вышеизложенный вопрос был не ясен, «ресурсами андроида» я имел в виду Р.java). – Marc

+0

Что вы подразумеваете под «доступом к содержимому R.java»? если вы имеете в виду импорт/использование общедоступной переменной, сгенерированной в R.java. Просто импортируйте com.example.R в класс POJO. Заметим, что R.java автоматически генерируется из ресурсов приложения и буквально изменен SDK. Я не знаю, чего вы хотите достичь здесь, но я не вижу смысла использовать R.java вне android.content.Context. – yorkw

+0

Посредством доступа я имел в виду возможность получать различную информацию о ресурсах. Например, получите значение int id от имени (аналогично 1-й строке кода). Я просто не хотел проходить в контексте, если бы мне этого не нужно. – Marc

1

Android рамка при компиляции приложения создания статического класса вызова:

your.namespace.project.R 

вы можете статический назвать этот класс, как:

your.namespace.project.R.string.my_prop 

this.context.findViewById(your.namespace.project.R.id.my_id_prop); 

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

Resources res = this.context.getResources(); 
int id = res.getIdentifier("bar"+Integer.toString(i+1), "id", this.context.getPackageName()); 
Смежные вопросы