我正在尝试将配置(例如 URL/等)放入资源文件夹以供实用程序类使用。但是,我不想从各处的活动中传递上下文。我希望能够通过路径名访问资源(似乎 assets/ 是为此用途而设计的),而无需使用上下文来访问资源。
在这种特殊情况下,我希望单例在实例化时使用配置中的某些内容。除了实例化期间的一次之外,它不需要任何资源。因此,每次调用 getInstance() 时都必须传入一个 Context 完全是浪费。
此外,这特定于应用程序的配置,不应存储在共享系统文件或类似文件中。
我正在尝试将配置(例如 URL/等)放入资源文件夹以供实用程序类使用。但是,我不想从各处的活动中传递上下文。我希望能够通过路径名访问资源(似乎 assets/ 是为此用途而设计的),而无需使用上下文来访问资源。
在这种特殊情况下,我希望单例在实例化时使用配置中的某些内容。除了实例化期间的一次之外,它不需要任何资源。因此,每次调用 getInstance() 时都必须传入一个 Context 完全是浪费。
此外,这特定于应用程序的配置,不应存储在共享系统文件或类似文件中。
采用
Resources.getSystem().getString(android.R.string.someuniversalstuff)
您可以在应用程序的任何地方使用它,甚至在静态常量声明中!但仅适用于系统资源。
对于本地资源,请使用该解决方案。
您可以扩展主应用程序类并在那里提供通用助手来访问资源。这减轻了对上下文的需求,因为应用程序将提供上下文而不是调用者。应用程序类是单例样式的,并且在应用程序的任何部分(包括服务)运行时应该始终可用。
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"
... >
我建议您执行以下操作:不要在任何地方传递上下文,而是让您的活动类成为具有返回上下文的公共函数的单例类:
private static ActivityMain instance;
在 super.onCreate() 之前在 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);
不幸的是,我认为没有真正的解决方法。我布置了类似这样的东西,并且还传入了 getApplicationContext() 而不是活动上下文。
public static AppController getAppController(Context context){
if(self == null) {
//Create instance
self = new AppController();
}
return self;
}
进而:
appController = AppController.getAppController(getApplicationContext());
stackoverflow 对以下问题的回答显示了如何使用 POJO 获取到资源的流,如果您提供它的路径。这在您需要从众多资源之一中选择特定资源的情况下可能很有用。