Aufgabe: Ich möchte Dateien aus MediaStore
in einem Hintergrundthread löschen, damit der Benutzer mit meiner App arbeiten kann, während der Thread funktioniert.Dateien in einem Hintergrundthread löschen
Problem: Ich weiß, dass jedes Mal, wenn ein Prozess beendet ist, seine Fäden als auch ihre Arbeit beenden. Es bedeutet also, dass ich nicht alle ausgewählten Dateien aus der MediaStore
löschen kann, wenn der Benutzer die App schnell schließt und damit den Prozess beendet.
Mögliche Lösung: Denken Sie, ist es eine gute Idee, dieses Verfahren als separaten Prozess (Task) zu implementieren? Zum Beispiel mit einem Service
.
-Code:
Snackbar.make(findViewById(R.id.rootView),message)
.setAction("UNDO", new View.OnClickListener() {
@Override
public void onClick(View view) {
//restore data
}
})
.addCallback(new BaseTransientBottomBar.BaseCallback<Snackbar>() {
@Override
public void onDismissed(Snackbar transientBottomBar, int event) {
super.onDismissed(transientBottomBar, event);
switch (event) {
case DISMISS_EVENT_SWIPE:
case DISMISS_EVENT_TIMEOUT:
//delete the files using either a background thread, or a separate task
break;
}
}
})
.show();
UPDATE:
public static void deleteFile(Context context, File mediaFile) {
if(!mediaFile.delete()) {
Log.e(TAG, "Cannot delete file "+ mediaFile.getAbsoluteFile());
}
String[] projection = { MediaStore.Images.Media._ID };
String selection = MediaStore.Images.Media.DATA + " = ?";
String[] selectionArgs = new String[] { mediaFile.getAbsolutePath() };
Uri queryUri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI;
ContentResolver contentResolver = context.getContentResolver();
Cursor cursor = contentResolver.query(queryUri, projection, selection, selectionArgs, null);
if(cursor!=null) {
if (cursor.moveToFirst()) {
long id = cursor.getLong(cursor.getColumnIndexOrThrow(MediaStore.Images.Media._ID));
Uri deleteUri = ContentUris.withAppendedId(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, id);
contentResolver.delete(deleteUri, null, null);
}
cursor.close();
}
}
Thank you!
Wie viele Dateien? Dieser Prozess benötigt eine erhebliche Zeit? – weston
Es kommt darauf an. Es kann 10 oder 1000. Grundsätzlich kann ein Benutzer den gesamten Ordner von Dateien löschen. – nullbyte
dauert es lange 1000 Dateien zu löschen? Besonders in einem Ordner zusammen. Ich nehme an, Sie löschen nicht nur, sondern aktualisieren auch den 'MediaStore'. – weston