DeleteFile - mayurparmar2/AlarmDemo GitHub Wiki
deletePhoto.java
public void deletePhoto(String filePath) {
ArrayList<String> deletedFilePaths = new ArrayList<>();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
// Use MediaStore for Android 10 and later
ContentResolver resolver = getContentResolver();
// Query for the file in MediaStore
Uri mediaUri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI;
String[] projection = { MediaStore.Images.Media._ID };
String selection = MediaStore.Images.Media.DATA + "=?";
String[] selectionArgs = new String[]{ filePath };
Cursor cursor = resolver.query(mediaUri, projection, selection, selectionArgs, null);
if (cursor != null && cursor.moveToFirst()) {
long id = cursor.getLong(cursor.getColumnIndexOrThrow(MediaStore.Images.Media._ID));
Uri contentUri = ContentUris.withAppendedId(mediaUri, id);
try {
// Delete the file using ContentResolver
int rowsDeleted = resolver.delete(contentUri, null, null);
if (rowsDeleted > 0) {
deletedFilePaths.add(filePath);
// Optional: Update media scanner
MediaScannerConnection.scanFile(this, new String[]{ filePath }, null, null);
// Handle UI updates or notify listeners about deletion
handleFileDeleted(deletedFilePaths);
} else {
Log.e("DeletePhoto", "Failed to delete file: " + filePath);
}
} catch (RecoverableSecurityException e) {
// Handle permission request if necessary
handleRecoverableSecurityException(e);
}
cursor.close();
} else {
Log.e("DeletePhoto", "File not found in MediaStore: " + filePath);
}
} else {
// Fallback for older Android versions (optional)
File file = new File(filePath);
if (file.exists() && file.delete()) {
deletedFilePaths.add(filePath);
handleFileDeleted(deletedFilePaths);
} else {
Log.e("DeletePhoto", "Failed to delete file: " + filePath);
}
}
}
private void handleFileDeleted(ArrayList<String> deletedFilePaths) {
// Handle UI updates or notify listeners about deletion
// For example:
runOnUiThread(() -> {
// Update UI or adapter after deletion
adapter.notifyDataSetChanged();
// Notify listeners or perform additional actions
RxBus.getInstance().post(new DeleteEvent(deletedFilePaths));
});
}
private void handleRecoverableSecurityException(RecoverableSecurityException e) {
try {
IntentSender intentSender = e.getUserAction().getActionIntent().getIntentSender();
startIntentSenderForResult(intentSender, REQUEST_PERMISSION_DELETE_FILE, null, 0, 0, 0, null);
} catch (IntentSender.SendIntentException sendIntentException) {
sendIntentException.printStackTrace();
}
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == REQUEST_PERMISSION_DELETE_FILE) {
if (resultCode == RESULT_OK) {
// Permission granted, attempt to delete the file again if needed
// For example:
deletePhoto(filePathToDelete);
} else {
// Permission denied by user
Toast.makeText(this, "Permission denied", Toast.LENGTH_SHORT).show();
}
}
}