2016-12-12 2 views
0

Mein Problem ist, dass ich die Bilder aus dem externen Speicher löschen und ein schwarzer Platzhalter ist immer noch dort auf den Speicherort des gelöschten Bildes verweist.Aktualisieren Galerie nach dem Löschen Bild aus dem externen Speicher

Hier ist Code bitte helfen Sie mir, es zu bekommen.

Vielen Dank im Voraus.

String canonicalPath; 
     try { 
      canonicalPath = file.getCanonicalPath(); 
     } catch (IOException e) { 
      canonicalPath = file.getAbsolutePath(); 
     } 
     final Uri uri = MediaStore.Files.getContentUri("external"); 
     final int result = contentResolver.delete(uri, 
       MediaStore.Files.FileColumns.DATA + "=?", new String[]{canonicalPath}); 
     if (result == 0) { 
      final String absolutePath = file.getAbsolutePath(); 
      if (!absolutePath.equals(canonicalPath)) { 
       contentResolver.delete(uri, 
         MediaStore.Files.FileColumns.DATA + "=?", new String[]{absolutePath}); 
      } 
     } 

Antwort

0

Ich habe diese Funktion immer für meine Musik-App verwendet, sollte aber auch für die Galerie funktionieren. Dieser findet zuerst den _id des gewünschten Eintrags, dann erstellt er das richtige uri, das an die Löschabfrage übergeben wird.

public void deleteFromMediaStore(String pathToDelete, Context context) { 
    ContentResolver contentResolver = context.getContentResolver(); 
    if (contentResolver != null) { 
     Cursor matchingIndex = contentResolver.query(Media.EXTERNAL_CONTENT_URI, new String[]{"_id", "_data"}, "_data=?", new String[]{pathToDelete}, null); 

     if(matchingIndex != null && matchingIndex.getCount() > 0) { 
      matchingIndex.moveToFirst(); 
      while (!matchingIndex.isAfterLast()) { 
       context.getContentResolver().delete(ContentUris.withAppendedId(Media.EXTERNAL_CONTENT_URI, (long) matchingIndex.getInt(matchingIndex.getColumnIndex("_id"))), null, null); 
       matchingIndex.moveToNext(); 
      } 
      matchingIndex.close(); 
     } 
    } 
} 
+0

Problem i in diesem Verfahren unter Pfad als String bin das Senden „/ storage/emulierten /0/Pictures/Sticker/stricker1.jpg " Ist es richtig? Dieses Bild wurde von diesem Ort gelöscht. Nach dem Löschen dieses Bilds rufe ich deleteFromMediaStore() diese Methode auf? –

+0

@Rinkukataria könnte ein Problem mit Ihrem Gerät vorliegen. Der obige Code befindet sich in einer Produktions-App und funktioniert auf Tausenden von Geräten. – fillobotto

+0

Ja, ich verstehe. MatchingIndex.getCount() gibt mir 0 zurück. Bitte sagen Sie mir, was ich im Pfad senden soll /storage/emulate/0/Pictures/Sticker/stricker1.jpg ", File: /// storage/emulated/0 /Pictures/Sticker/stricker1.jpg " Ich habe versucht mit diesen beiden Pfaden, aber es funktioniert nicht. Können Sie mir bitte erklären. –

0

können Sie eine Sendung

Intent intent = 
     new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE); 
intent.setData(Uri.fromFile(file)); 
sendBroadcast(intent); 

senden oder wenn Sie Rückruf wollen

MediaScannerConnection.scanFile(
     getApplicationContext(), 
     new String[]{file.getAbsolutePath()}, 
     null, 
     new OnScanCompletedListener() { 
     @Override 
     public void onScanCompleted(String path, Uri uri) { 

     } 
     }); 
+0

beide Lösungen funktionieren nicht. –

Verwandte Themen