0

モバイルのSDカードにビットマップを保存しています。次に、ビットマップを保存したフォルダーにあるすべてのファイルを一覧表示する別の方法があります。問題は、画像が保存されているときに、それらがフォルダーに実際に存在するかどうかを確認したにもかかわらず、そのフォルダーから画像をリストするコードがそれらの画像を返さないことです。通常、数回使用すると表示されますアプリですが。誰でもこれで私を助けることができますか?私のコードは以下にあります。

これはビットマップを保存するためのものです

imagesFolder = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES), "ILoveKitties");

if(!imagesFolder.exists())
    imagesFolder.mkdirs();
int imageNum;
if(imagesFolder.list()==null)
    imageNum = 1;
else
    imageNum = imagesFolder.list().length + 1;

String fileName = "appname_" + String.valueOf(imageNum) + ".jpg";
output = new File(imagesFolder, fileName);
while(output.exists()){
    imageNum++;
    fileName = "appname_" + String.valueOf(imageNum) + ".jpg";
    output = new File(imagesFolder, fileName);
}

OutputStream fOut = new FileOutputStream(output);
merged.compress(Bitmap.CompressFormat.JPEG, 100, fOut);
fOut.flush();
fOut.close();
fOut = null;
saved = true;
savedFilePath = "file://" + output.getCanonicalPath();

そして、これはフォルダ内のファイルのリストを取得するためのものです

boolean isSDPresent = android.os.Environment.getExternalStorageState().equals(android.os.Environment.MEDIA_MOUNTED);
if(isSDPresent) {
    String[] projection = {MediaStore.Images.Media.DATA};
    cursor = getContentResolver().query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
            projection, 
            MediaStore.Images.Media.DATA + " like ? ", 
            new String[] {"%APPNAME%"}, 
            null);
    columnIndex = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);

    File testFileAvailability;
    for(int i=cursor.getCount()-1; i>=0; i--){
        cursor.moveToPosition(i);
        // get image filename
        testFileAvailability = new File("file://" + cursor.getString(columnIndex));
        if(testFileAvailability.exists()){
            listImagePath.add("file://" + cursor.getString(columnIndex));
        }

    }
}

次に、パスを使用して画像を表示します。

4

1 に答える 1

1

デバイス ストレージにファイルを保存したら、メディア スキャナをトリガーしてファイル エントリを MediaStore に挿入するだけで、アプリケーションはファイル パスを取得できるはずです。

Media Scanner をトリガーするには、以下のコードを使用します。

sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED, Uri.parse("file://" + Environment.getExternalStorageDirectory())));

実際には、Media Scanner をトリガーして、現在保存されているファイル エントリを取得する必要があります。Android デバイスは再起動時に行います。または、ネイティブ カメラまたはギャラリー アプリケーションを起動します (実装されている場合)。

于 2013-01-10T10:00:54.993 に答える