11

音楽や写真など、いずれかのタイプのメディアライブラリにリストされているファイルとリストされていないファイルを削除するアプリを作成しています。このMediaScannerConnection.scanFileメソッドを使用してメディアライブラリにファイルを追加することはできますが、ファイルが削除されたことをサービスに通知するための呼び出しはないようです。存在しなくなったファイルのパスを送信しても、目的の動作にはなりません。Androidストレージに存在しなくなったアイテムをライブラリから削除するにはどうすればよいですか?

4

5 に答える 5

14

これらの2つの質問の断片を使用してメソッドをまとめることができました

  1. MediaStore.Audio.Playlists.Members.getContentUriの文字列'volumeName'引数は何を参照していますか?
  2. AndroidでMediaStoreを更新するにはどうすればよいですか?

基本的に、MediaStoreタイプ(オーディオ、ビデオ、画像)のそれぞれに対してクエリを実行し、パスで選択して、見つかったレコードを削除します。

public static void RemoveAllForPaths(String[] paths, Context context)
{
    private static final String[] FIELDS = { MediaStore.MediaColumns._ID, MediaStore.MediaColumns.DATA, MediaStore.MediaColumns.TITLE };
    if(paths == null || paths.length == 0) return;
    String select = "";
    for(String path : paths)
    {
        if(!select.equals("")) select += " OR ";
        select += MediaStore.MediaColumns.DATA + "=?";
    }

    Uri uri;
    Cursor ca;

    uri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
    ca = context.getContentResolver().query(uri, FIELDS, select, paths, null);
    for(ca.moveToFirst(); !ca.isAfterLast(); ca.moveToNext()){
        int id = ca.getInt(ca.getColumnIndex(MediaStore.MediaColumns._ID));
        uri = ContentUris.withAppendedId(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, id);
        context.getContentResolver().delete(uri, null, null);
    }
    ca.close();

    // More of the same just setting the URI to Video and Images
}

これがどれほど安全かは完全にはわかりませんが、これまでに見つけた唯一の解決策であり、いくつかの初期テストが機能しているようです。このアプローチまたはこの機能を実行するためのより良い方法についてさらに情報があれば、他の人に他の回答を提出するように勧めます。

于 2011-12-05T02:15:20.070 に答える
8

パイのように簡単:ファイルを追加するときはいつでも、MediaStore ContentProviderを使用してそのことを知らせてください

sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, Uri.fromFile(fileToAddInMediaStore)));

削除の場合:使用するだけ

getContentResolver().delete(Uri.fromFile(fileToDeleteFromMediaStore), null, null)
于 2013-02-13T08:49:35.703 に答える
8

Spencer Ruportの答えは正しいですが、削除するためにクエリを実行してカーソルを開く必要はありません。したがって、音楽ファイルである1つのファイルの場合、コードは次のように単純です。

public void DeleteMP3FromMediaStore( Context context, String path )
{
    Uri rootUri = MediaStore.Audio.Media.getContentUriForPath( path );

    context.getContentResolver().delete( rootUri, 
        MediaStore.MediaColumns.DATA + "=?", new String[]{ path } );
}

PS Spencer Ruportの回答にコメントしたかったのですが、まだ十分な評判がありません。

于 2014-10-16T11:39:27.333 に答える
6

以下は私にとってうまくいきます。これを使用してファイルを削除または追加できます。

MediaScannerConnection.scanFile(
                context,
                new String[]{fileToDelete, fileToAdd},
                null, null);
于 2015-02-28T08:39:08.837 に答える
0

使用可能な方法は、ライブラリからアイテムを削除することです。この投稿では、メディアライブラリに追加またはメディアライブラリから削除する方法について詳しく説明しています。 http://androidyue.github.io/blog/2014/01/19/scan-media-files-in-android/ これがお役に立てば幸いです。

于 2014-01-19T13:56:01.023 に答える