4

知りたいのですが、アクティビティの外部で(コンテキストを渡さずに)Androidリソースやアセットファイル(または他のフォルダーのファイル)にアクセスする方法はありますか?

コンテキストなしではアクセスできません:

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

アクティビティにない場合は例外をスローします:

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)
4

2 に答える 2

5

フォルダーがプロジェクトビルドパスに含まれている場合は、たとえばPOJOから(android.contentの参照を渡したくない場合に備えて)android.content.Contextの外部でフォルダーの下にあるClassLoaderアクセス​​ファイルを使用できます。 。コンテクスト):

String file = "res/raw/test.txt";
InputStream in = this.getClass().getClassLoader().getResourceAsStream(file);
  • resフォルダーは、これまでのすべてのAndroidSDKバージョンでデフォルトでプロジェクトビルドパスに含まれています。
  • アセットフォルダーは、AndroidSDKr14より前のデフォルトでプロジェクトビルドパスに含まれていました。

プロジェクトビルドパスにフォルダーを追加するには、プロジェクトを右クリックします-ビルドパス-ビルドパスを構成し、フォルダー(たとえば、新しいSDKバージョンを使用している場合はアセット)をビルドパスのソースフォルダーとして追加します。

私が以前に答えた同様の質問をここでチェックしてください。

于 2012-04-10T00:25:38.737 に答える
1

アプリをコンパイルするときの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());
于 2013-09-03T18:41:42.063 に答える