在没有上下文的情况下访问资源

mne*_*emy 27 java android android-context android-resources

我正在尝试将配置(例如URL/etc)放入资源文件夹中以供实用程序类使用.但是,我不想从各地的活动中传递Context.我希望能够通过路径名访问资源(似乎资产/是为此用途设计的),而不使用上下文来访问资源.

在这种特殊情况下,我希望单例在实例化时在配置中使用某些东西.在实例化期间,除了那一次之外,它不需要任何资源.因此,每次调用getInstance()时都必须传入一个Context,这将是一个完全的浪费.

此外,这特定于App的配置,不应存储在共享系统文件或类似的任何内容中.

Gan*_*nus 77

使用

Resources.getSystem().getString(android.R.string.someuniversalstuff)
Run Code Online (Sandbox Code Playgroud)

您可以在应用程序中无处不在地使用它,即使在静态常量声明中也是如此!但仅限系统资源.

对于本地资源使用该解决方案.

  • **但仅限系统资源.** (37认同)
  • 这个答案有误导性,问题是指当地资源 (2认同)

San*_*yrm 14

您可以扩展主应用程序类并在那里提供通用帮助程序来访问资源.这减轻了对上下文的需求,因为应用程序将提供上下文而不是调用者.应用程序类是单例样式,应该在应用程序的任何部分运行时始终可用(包括服务).

public class MyApplication extends Application {
 protected static MyApplication instance;

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

 public static Resources getResources() {
  return instance.getResources();
 }
}
Run Code Online (Sandbox Code Playgroud)

这使您可以访问:

MyApplication.getResources()....
Run Code Online (Sandbox Code Playgroud)

请务必在清单中声明自定义应用程序以获取对此的访问权限.假设您的自定义应用程序位于应用程序命名空间的根目录中:

<application
 android:name=".MyApplication"
 ... >
Run Code Online (Sandbox Code Playgroud)