3

画像ファイルを外部ストレージに保存しようとしています。写真を SD カードに保存できますが、Android のギャラリー アプリケーションに表示されません。私はこのアプローチを試しました:

File path = Environment.getExternalStorageDirectory();
            File f = new File(path + "/mydirectory/" + imageName + "_" +     System.currentTimeMillis() + ".jpg");
            FileOutputStream fos = new FileOutputStream(f);
            f.mkdirs();
            b.compress(CompressFormat.JPEG, 100, fos);
            fos.close();

            Uri contentUri = Uri.fromFile(f);
            Intent mediaScanIntent = new Intent("android.intent.action.MEDIA_SCANNER_SCAN_FILE");
            mediaScanIntent.setData(contentUri);
            getApplicationContext().sendBroadcast(mediaScanIntent);

しかし、ギャラリーには表示されません。この問題を解決するために誰かが私を正しい方向に向けることができますか?

4

4 に答える 4

11

このコードを使用して、イメージ ビットマップを Android デバイス ギャラリーに保存します。

public void savePhoto(Bitmap bmp)
{
imageFileFolder = new File(Environment.getExternalStorageDirectory(),"Rotate");
imageFileFolder.mkdir();
FileOutputStream out = null;
Calendar c = Calendar.getInstance();
String date = fromInt(c.get(Calendar.MONTH))
            + fromInt(c.get(Calendar.DAY_OF_MONTH))
            + fromInt(c.get(Calendar.YEAR))
            + fromInt(c.get(Calendar.HOUR_OF_DAY))
            + fromInt(c.get(Calendar.MINUTE))
            + fromInt(c.get(Calendar.SECOND));
imageFileName = new File(imageFileFolder, date.toString() + ".jpg");
try
{
 out = new FileOutputStream(imageFileName);
 bmp.compress(Bitmap.CompressFormat.JPEG, 100, out);
 out.flush();
 out.close();
 scanPhoto(imageFileName.toString());
 out = null;
} catch (Exception e)
{
e.printStackTrace();
}
}


public String fromInt(int val)
{
return String.valueOf(val);
}


public void scanPhoto(final String imageFileName)
{
msConn = new MediaScannerConnection(PreviewDemo1.this,new MediaScannerConnectionClient()
{
public void onMediaScannerConnected()
{
msConn.scanFile(imageFileName, null);
Log.i("msClient obj  in Photo Utility","connection established");
}
public void onScanCompleted(String path, Uri uri)
{
msConn.disconnect();
Log.i("msClient obj in Photo Utility","scan completed");
}
});
msConn.connect();
} 

ここでは、savePhoto メソッドで簡単に変更したくない場合は、「 Rotate 」フォルダーに画像を保存しています。

于 2011-10-07T13:44:03.397 に答える
5

私はこれに答えるのが少し遅れていることを知っていますが、これを読んでいる他の人にとっては、surendraからの答えは正しいと思います.MediaScannerConnectionを使用することはギャラリーを更新する方法です. nevvaが彼のコードへの変更を提案していた方法については、次のとおりです。

    Intent mediaScanIntent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE);
    Uri contentUri = Uri.fromFile(f);
    mediaScanIntent.setData(contentUri);
    getApplicationContext().sendBroadcast(mediaScanIntent);
于 2013-08-20T16:13:12.580 に答える
2

Android でのメディア ファイルのスキャンに関する詳細な記事を書き留めました。 http://androidyue.github.io/blog/2014/01/19/scan-media-files-in-android/ これがお役に立てば幸いです。

于 2014-01-20T05:45:01.097 に答える
1

ビットマップを sd に保存した後、MediaScannerConnection を使用するだけです。

MediaScannerConnection.scanFile(this,
                new String[] { Bitmapfile.getAbsolutePath() }, null,
                new MediaScannerConnection.OnScanCompletedListener() {
                    public void onScanCompleted(String path, Uri uri) {
                        //now visible in gallery
                    }
                }
            );
于 2014-09-25T14:40:09.780 に答える