Подтвердить что ты не робот

Доступ к ресурсам без контекста

Я пытаюсь установить конфигурацию, такую ​​как URL/etc, в папку ресурса для используемого класса утилиты. Тем не менее, я не хочу передавать Контекст из всей деятельности. Я хотел бы иметь доступ к ресурсу с помощью имени пути (похоже, для этого было использовано свойство /), без использования контекста для доступа к ресурсу.

В этом конкретном случае я хочу, чтобы singleton использовал что-то в конфигурации при его создании. Он не нуждается ни в чем из ресурсов помимо того, что один раз во время создания экземпляра. Следовательно, при переходе в контекст каждый раз, когда вызывается getInstance(), это будет полная потеря.

Кроме того, это специфично для конфигурации приложения и не должно храниться в общем системном файле или что-то в этом роде.

4b9b3361

Ответ 1

Использование

Resources.getSystem().getString(android.R.string.someuniversalstuff)

Вы можете использовать его абсолютно в любом месте в своем приложении, даже в объявлении статических констант! Но только для системных ресурсов.

Для локальных ресурсов используйте это решение.

Ответ 2

Вы можете расширить основной класс приложения и предоставить универсальные помощники для доступа к ресурсам. Это избавляет от необходимости контекста, поскольку приложение будет предоставлять контекст вместо вызывающего. Класс приложения является одноточечным и всегда должен быть доступен, пока какая-либо часть вашего приложения работает (включая службы).

public class MyApplication extends Application {
 protected static MyApplication instance;

 @Override
 public void onCreate() {
  super.onCreate();
  instance = this;
 }

 public static Resources getResources() {
  return instance.getResources();
 }
}

Это дает вам доступ к:

MyApplication.getResources()....

Обязательно объявите свое пользовательское приложение в своем манифесте, чтобы получить доступ к этому. Предполагая, что ваше пользовательское приложение находится в корневом пространстве вашего приложения:

<application
 android:name=".MyApplication"
 ... >

Ответ 3

К сожалению, я не думаю, что вокруг этого есть реальный путь. Я выложил что-то вроде этого, а также передал getApplicationContext() вместо контекста активности.

public static AppController getAppController(Context context){
    if(self == null) {
        //Create instance
        self = new AppController();
    }

    return self;
}

И затем:

appController = AppController.getAppController(getApplicationContext());

Ответ 4

Я бы рекомендовал сделать следующее: Вместо того, чтобы передавать контекст везде, сделайте свой класс активности одиночным классом с публичной функцией, которая возвращает контекст:

private static ActivityMain instance;

Инициализировать внутри onCreate() перед super.onCreate():

instance = this;

Затем добавьте эти публичные функции в свою деятельность:

/** Get singleton instance of activity **/
public static ActivityMain getInstance() {
    return instance;
}

/** Returns context of this activity **/
public static Context getContext(){
    return instance.getApplicationContext();
}

Теперь вы можете использовать следующее в любом классе:

Context context = AntiMorphActivity.getContext();
String packageName = context.getPackageName();
int id = context.getResources().getIdentifier("web_page", "raw", packageName);

Ответ 5

Ответ на stackoverflow на вопрос ниже показывает, как использовать POJO для получения потока на ресурс, если вы укажете его путь. Это может быть полезно в случаях, когда вам нужно выбрать конкретный ресурс из одного из многих.

Возможно ли прочитать сырой текстовый файл без ссылки на Контекст в проекте библиотеки Android