web-dev-qa-db-ja.com

AndroidのドローアブルリソースからSDカードに画像を保存します

ボタンをクリックしてユーザーのSDカードに画像を保存する方法を知りたいです。誰かが私にそれを行う方法を教えてもらえますか?画像は.png形式であり、ドローアブルディレクトリに保存されます。その画像をユーザーのSDカードに保存するボタンをプログラムしたいと思います。

22
Moussa

ファイル(あなたの場合は画像です)を保存するプロセスはここで説明されています: save-file-to-sd-card


ドローブルリソースから画像をSDカードに保存:

ドローアブルに画像ic_launcherがあるとします。次に、この画像から次のようにビットマップオブジェクトを取得します。

Bitmap bm = BitmapFactory.decodeResource( getResources(), R.drawable.ic_launcher);

SDカードへのパスは、以下を使用して取得できます。

String extStorageDirectory = Environment.getExternalStorageDirectory().toString();

次に、ボタンクリック時にSDカードに保存します。

File file = new File(extStorageDirectory, "ic_launcher.PNG");
    FileOutputStream outStream = new FileOutputStream(file);
    bm.compress(Bitmap.CompressFormat.PNG, 100, outStream);
    outStream.flush();
    outStream.close();

Android.permission.WRITE_EXTERNAL_STORAGE権限を追加することを忘れないでください。

ドローアブルから保存するための変更されたファイルは次のとおりです。 SaveToSd 、完全なサンプルプロジェクト: SaveImage

39
Imran Rana

私はその質問には実際の解決策はないと思います、それを行う唯一の方法は、次のようにsd_cardキャッシュディレクトリからコピーして起動することです:

Bitmap bm = BitmapFactory.decodeResource(getResources(), resourceId);
File f = new File(getExternalCacheDir()+"/image.png");
try {
    FileOutputStream outStream = new FileOutputStream(f);
    bm.compress(Bitmap.CompressFormat.PNG, 100, outStream);
    outStream.flush();
    outStream.close();
} catch (Exception e) { throw new RuntimeException(e); }

Intent intent = new Intent();
intent.setAction(Android.content.Intent.ACTION_VIEW);
intent.setDataAndType(Uri.fromFile(f), "image/png");
startActivity(intent);


// NOT WORKING SOLUTION
// Uri path = Uri.parse("Android.resource://" + getPackageName() + "/" + resourceId);
// Intent intent = new Intent();
// intent.setAction(Android.content.Intent.ACTION_VIEW);
// intent.setDataAndType(path, "image/png");
// startActivity(intent);
3
Ian Holing