2010-12-13 21 views

答えて

14

Androidには、メディアファイルを追跡する種類のキャッシュがあります。

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

それは、デバイスのキャッシュから削除された画像を削除する必要があり、再び実行しMediaScannerサービスを、作る:

はこれを試してみてください。

<intent-filter> 
    <action android:name="android.intent.action.MEDIA_MOUNTED" /> 
    <data android:scheme="file" /> 
</intent-filter> 
+0

、感謝を働きました! – Paul

+1

巨大なリソースの豚 –

+0

@aloneguid、なぜか説明する気に? –

6

ます。また、使用してギャラリーから画像を削除することができます:あなたもあなたのAndroidManifest.xmlにこの権限を追加する必要があるよう

が見える。

getContentResolver()、(imageUriを削除null、null);

「imageUri」が、あなたが挿入を呼び出したときに返されたURIであることを確認してください。取ら

+1

"不明なURL"のエラーが続きます。あなたは、電話のルートまたはトップレベルのパスだけで完全なパスを通過していますか?私は両方を試して、未知のURLエラーを取得し続けます。私はギャラリーにファイルを追加したときの挿入URIのデータベースを維持できません。私が知っているファイルパスだけを使ってギャラリーからアイテムを削除することはできますか?メディアスキャナを使用してギャラリーにアイテムを追加できますが、ファイルを削除した後でアイテムを削除することはできません。 – user1017063

+0

この方法はgalleyから実際のイメージを削除するか、ギャラリーからこのパスを使ってイメージを隠すだけですか? – hadi

+0

これはimageUri = "content:...." uri-sでは有効ですが、 "file:...."では使用できませんurils – k3b

2

:コメントで述べたようにhttp://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/content/ExternalStorage.html

これは(HTCの欲望、アンドロイド2.3でテスト)私のため

// Tell the media scanner about the new file so that it is 
// immediately available to the user. 
MediaScannerConnection.scanFile(this,new String[] { file.toString() }, null, 
new MediaScannerConnection.OnScanCompletedListener() { 
public void onScanCompleted(String path, Uri uri) { 
Log.i("ExternalStorage", "Scanned " + path + ":"); 
Log.i("ExternalStorage", "-> uri=" + uri); 
} 
}); 
8

を働いた、受け入れ答えは、大量のメモリを使用しています。 MediaScannerConnectionには "deleteFile"メソッドがありませんが、ファイルを削除した後は、古いファイルパスを "scanFile"メソッドに渡してください。メディアスキャナは、メディアを再スキャンして取り除きます。

N5で試験した。 Android 4.4。

EDIT:。その他は4.2

new AsyncTask<Void, Void, Void>(){ 
     @Override 
     protected Void doInBackground(Void... params) { 
      String filePath = recording.file.getAbsolutePath(); 
      recording.file.delete(); 
      MediaScannerConnection.scanFile(context, 
        new String[]{filePath}, null, null); 
      return null; 
     } 
    }.execute(); 
+0

これはIntent.ACTION_MEDIA_MOUNTEDブロードキャストを使用するよりも優れています! –

+1

これはアンドロイドでは動作しません4.2 – Praveen

+0

私はアンドロイド4.2でこれを行い、動作しませんでした。 4.4バージョン以下のアンドロイドのこの問題のみですか? – hadi

1

このメソッドを使用し getContentResolver()では動作しません。これを述べた削除(MediaStore.Images.Media.EXTERNAL_CONTENT_URI、
MediaStore.Images.Media._ID + "=?"、new String [] {Long.toString(id)});

String fullPathToFile = "/storage/sdcard0/DICM/test.jpg"; 
    getContentResolver().delete(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, 
     MediaStore.Images.Media.DATA + "=?", new String[]{ fullPathToFile }); 

あなたはまた、ファイル名により削除することができます@manishaの答えと @Muhammad Waqasカーンに必要に応じて、あなたがイメージ-IDを知ってscroll down toパソコンへ転送した場合

+0

"id"の値はどうすればよいですか? – Sebek

3

[更新2016年6月16日]

危険:「これはmediaDBからアイテムを削除する」のようです。 mediaDBにSQLite-cascade-file-delete-triggerがあるので、参照ファイルも存在していればが削除されます。

これを避けるには、deleteを呼び出す前にMediaStore.Images.Media.DATA列を既存のファイルパスに変更する必要があります。

0

File.delete();後に次の行を追加します。

MediaScannerConnection.ScanFile(this,new string[]{fileUrl.ToString()}, null, null); 
関連する問題