活动以外的Android获取资源 [英] Android access to resources outside of activity
问题描述
我想知道 - 是有办法(从任何其他文件夹或文件)访问Android的资源和/或资产的文件的活动以外(的没有通过上下文的)?
可以没有上下文无法访问:
getResources()则getIdentifier(RESOURCE_NAME,绘制,getPackageName())。
getAssets()开(file_in_assets_folder_name)。
抛出异常,如果不是在活动:
尝试{
类= R.drawable.class;
场场= class.getField(RESOURCE_NAME);
整数i =新的整数(field.getInt(空));
}赶上(例外五){}
也试过以下,但它抱怨文件不存在(在这里做得不对?):
网址URL =新的URL(文件:///android_asset/file_name.ext);
的InputSource源=新的InputSource(url.openStream());
//例外,看起来像这样04-10 00:40:43.382:W / System.err的(5547):java.io.FileNotFoundException:/android_asset/InfoItems.xml(没有这样的文件或目录)
如果该文件夹包含在项目构建路径,你可以使用的的ClassLoader 访问下他们,如果你不希望文件android.content.Context之外,例如,从一个POJO(如遇通过android.content.Context的引用):
字符串文件=RES /生/ test.txt的;
InputStream的时间= this.getClass()getClassLoader()的getResourceAsStream(文件)。;
- 在res文件夹包含到默认项目构建路径,所有的Android SDK版本至今。
- 资产文件夹被列入到默认的Android SDK之前的R14项目构建路径。
要添加文件夹到项目构建路径,右击你的项目 - 构建路径 - 配置构建路径,添加文件夹(例如,如果资产使用后的SDK版本)作为构建路径中的源文件夹
检查出类似的问题,我之前在<一个回答href="http://stackoverflow.com/questions/9855197/is-it-possible-to-read-a-raw-text-file-without-context-reference-in-an-android-l/9855725#9855725">here.
I would like to know - are there ways to access android resources and/or assets files (or files from any other folder) outside of an Activity (without passing context)?
Can't access without context:
getResources().getIdentifier("resource_name", "drawable", getPackageName());
getAssets().open("file_in_assets_folder_name");
Throws Exception if not in Activity:
try {
Class class = R.drawable.class;
Field field = class.getField("resource_name");
Integer i = new Integer(field.getInt(null));
} catch (Exception e) {}
Also tried the below, but it complains file doesn't exist (doing something wrong here?):
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)
If the folders are included in the Project Build Path, you can use ClassLoader access files under them outside the android.content.Context, for instance, from a POJO (in case if you don't want to pass a reference of android.content.Context):
String file = "res/raw/test.txt";
InputStream in = this.getClass().getClassLoader().getResourceAsStream(file);
- The res folder is included into Project Build Path by default by all Android SDK version so far.
- The assets folder was included into Project Build Path by default before Android SDK r14.
To add folders into Project Build Path, right click your project -- Build Path -- Configure Build Path, add your folder (for example, assets if using later SDK version) as a Source folder in build path.
Check out the similar question I answered before at here.
这篇关于活动以外的Android获取资源的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!