5

私はそのようにファイルを削除しています

File fileToDelete =  new File("filepath");
Boolean fileDeleted =  fileToDelete.delete();

fileDeleted は true で、DDMS を確認するとファイルはありませんが、ギャラリーをクリックすると、削除されたばかりの画像が表示されます。変更を確認するには、エミュレーターを再起動する必要があります。

エミュレーターを再起動せずに変更を確認する方法はありますか? 私はエクリプスを使用しています

4

3 に答える 3

17

ギャラリーは、Android のメディア データベースを使用して、メディアの一覧を表示しています。ファイルシステムを再度スキャンするまで、ファイルを削除してもデータベースには反映されません。これは、たとえば再起動後に行われます。

データベースからファイルを直接削除するか、削除したばかりのファイルまたはフォルダーを強制的にスキャンすることができます。

File fileToDelete =  new File("filepath");
boolean fileDeleted =  fileToDelete.delete();

// request scan    
Intent scanIntent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE);
scanIntent.setData(Uri.fromFile(fileToDelete));
sendBroadcast(scanIntent);
于 2012-08-26T14:01:20.103 に答える
3

ギャラリーが画像ファイルを表示する方法に関係しています。画像ファイルのサムネイルは MediaStore にキャッシュされ、すべての詳細は Mediastore contentProvider に存在します。

ファイルを削除しても、このデータベースは更新されません。ただし、エミュレータを再起動すると、Android によって Mediascanning が行われます。MediaScanning をトリガーできる場合、ギャラリーはファイルの表示を停止します

于 2012-08-26T13:59:24.743 に答える
2

次のコードを使用します (これは、ファイルの変更についてメディア システムに通知し、ギャラリーを正しく更新するビデオを作成するための私のコードにもよく似ています)。

private void deleteVideo(String videoUrl)
{
    File videoFile = new File(videoUrl);
    if (!videoFile.delete())
    {
        Log.e(TAG, "Failed to delete " + videoUrl);
    }
    else
    {
        MediaScannerConnection.scanFile(mContext,new String[] { videoUrl }, null, new MediaScannerConnection.OnScanCompletedListener() 
        {
            public void onScanCompleted(String path, Uri uri) 
            {
                Log.i("ExternalStorage", "Scanned " + path + ":");
                Log.i("ExternalStorage", "-> uri=" + uri);
            }
        });
    }
}
于 2014-02-05T22:50:25.627 に答える