2010年10月4日月曜日

外部APKからリソースを取得する方法

// 外部APKのパッケージ名
String packageName = "my.droid.example.outerresources";

Context context;
try {
    // パッケージ名からコンテキストを作成
    context = this.createPackageContext(packageName, Context.CONTEXT_RESTRICTED);
    //context = this.createPackageContext(packageName, Context.CONTEXT_IGNORE_SECURITY);

    // リソースの取得
    Resources res = context.getResources();

    // asset に下に作成したimagesディレクトリからファイルを取得
    AssetManager as = res.getAssets();
    String[] files = as.list("images");
    for(String file : files) {
        Log.d(TAG, "AssetFile="+file);
        InputStream is = as.open(file);
        Bitmap bitmap = BitmapFactory.decodeStream(is);
        ImageView imageView = new ImageView(this);
        imageView.setImageBitmap(bitmap);
        linearLayout.addView(imageView);
    }

    // res/drawable からイメージを取得
    int resId = res.getIdentifier("icon", "drawable", packageName);
    ImageView imageView = new ImageView(this);
    imageView.setImageDrawable(res.getDrawable(resId));
    linearLayout.addView(imageView);

} catch (NameNotFoundException e) {
    e.printStackTrace();
} catch (IOException e) {
    e.printStackTrace();
}