6

質問: メディア ストアで DELETED ファイルのエントリを更新する方法を教えてください。

コードで写真を外部ストレージから削除した後、削除した写真のスロットがギャラリーにまだ表示されます - 空白の写真です。

ギャラリーにはメディア ストアが反映されているようで、電話が再起動されるまで、または通常はメディアが再スキャンされるまで、削除された写真がメディア ストアで検出されます。

削除されたファイルをスキャンしようとしても、削除されたファイルのスキャンには役立ちませんでした(新規または既存のファイルに対してのみ機能します): MediaScannerConnection.scanFile(Application.get(), new String[]{file.getPath()}, null, null)(親フォルダーもスキャンしてみました)。

またACTION_MEDIA_SCANNER_SCAN_FILE、無駄にしようとしました。例:Application.get().sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, Uri.fromFile(file)))

ブロードキャスト レシーバーを送信して、外部ストレージ全体を再スキャンする (したがって、メディア ストアを更新する) と、うまくいきました。Application.get().sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED, Uri.fromFile(Environment.getExternalStorageDirectory())))

しかし、 4.4の時点で、ACTION_MEDIA_MOUNTED システム ブロードキャストを手動で送信しようとすると、Android がセキュリティ例外をスローするようです。@CommonsWare の投稿を参照してください: http://commonsware.com/blog/2013/11/06/android-4p4-permission-regressions.html

そのため、ファイル(/写真/ビデオ/など)の削除時にメディアストアを更新するための解決策がありません。

4

4 に答える 4

3

Nexus 10 の 4.4 で動作する次のものが見つかりました。

// request scan
Intent intent = new Intent();
intent.setType("image/*");
intent.setAction(Intent.ACTION_GET_CONTENT);
intent.addCategory(Intent.CATEGORY_OPENABLE);
startActivityForResult(intent, SELECT_PICTURE);
Intent scanIntent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE);
scanIntent.setData(Uri.fromFile(refreshFile));
sendBroadcast(scanIntent);

「refreshFile」は、文字列「fPath」から取得してファイルに変換した、削除したファイルです。

String filePath = fPath;        
File refreshFile = new File(filePath);
于 2013-11-23T15:15:58.337 に答える
0

試す

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

これをマニフェストに追加します。

<intent-filter>
      <action android:name="android.intent.action.MEDIA_MOUNTED" />
      <data android:scheme="file" /> 
</intent-filter>
于 2016-09-21T10:56:36.523 に答える