Android访问活动之外的资源

我想知道 - 是否有方法可以在Activity之外访问android资源和/或资产文件(或来自任何其他文件夹的文件)(无需传递上下文)?

无上下文无法访问:

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

如果不在Activity中,则抛出异常:

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)

如果这些文件夹包含在Project Build Path中,那么您可以在android.content.Context之外使用ClassLoader访问文件,例如,从POJO(如果您不想传递android.content的引用.Context):

String file = "res/raw/test.txt";
InputStream in = this.getClass().getClassLoader().getResourceAsStream(file);
  • 到目前为止,res文件夹默认由所有Android SDK版本包含在Project Build Path中。
  • 在Android SDK r14之前,assets文件夹默认包含在Project Build Path中。
  • 要将文件夹添加到Project Build Path中,右键单击您的项目 - 构建路径 - 配置构建路径,在构建路径中将源文件夹添加到您的文件夹(例如,如果使用更高SDK版本的话)。

    看看我在这里回答的类似问题。


    编译你的应用程序时的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());
    
    链接地址: http://www.djcxy.com/p/59997.html

    上一篇: Android access to resources outside of activity

    下一篇: Static access to an Android app's resources?