app通过MediaScannerConnection通知Scanner新增文件时会调用scanSingleFile函数,对其修改如下:
// this function is used to scan a single file
public Uri scanSingleFile(String path, String volumeName, String mimeType, String appPath) {//appPath为app要删除文件的路径
try {
initialize(volumeName);
prescan(path, true);
File file = new File(path);
if (!file.exists()) {
//[BUGFIX]-Add-BEGIN by test,07/10/2018,delete media file for app,
int nCount = -1;
int fileType = -1;
/*/mnt/media_rw/udisk/,/storage/udisk/*/
//Log.i(TAG, "path: " + path);
//Log.i(TAG, "appPath: " + appPath);
MediaFile.MediaFileType mediaFileType = MediaFile.getFileType(path);
if (mediaFileType != null) {
fileType = mediaFileType.fileType;
//Log.i(TAG, "fileType: " + fileType);
}
if(fileType == -1){
Log.e(TAG, "get filetype failed, return");
return null;
}
nCount = removeMediaFromLib(mContext, appPath, fileType);//test add 20180709,delete items from db
Log.i(TAG, "scanSingleFile file is not exists, delete item count: " + nCount);
//[BUGFIX]-Add-END by test
return null;
}
}
//[BUGFIX]-Add-BEGIN by test,07/10/2018,delete media file for app
private int removeImageFromLib (Context context, String filePath) {
int count = -1;
try{
count = mMediaProvider.delete(mPackageName, MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
MediaStore.Images.Media.DATA + "=?", new String[]{filePath});
}catch(RemoteException e){
Log.i(TAG, "RemoteException: " + e);
}finally{
return count;
}
}
private int removeAudioFromLib (Context context, String filePath) {
int count = -1;
try{
count = mMediaProvider.delete(mPackageName, MediaStore.Audio.Media.EXTERNAL_CONTENT_URI,
MediaStore.Audio.Media.DATA + "=?", new String[] {filePath});
}catch(RemoteException e){
Log.i(TAG, "RemoteException: " + e);
}finally{
return count;
}
}
private int removeVideoFromLib (Context context, String filePath) {
int count = -1;
try{
count = mMediaProvider.delete(mPackageName, MediaStore.Video.Media.EXTERNAL_CONTENT_URI,
MediaStore.Video.Media.DATA + "=?", new String[] {filePath});
}catch(RemoteException e){
Log.i(TAG, "RemoteException: " + e);
}finally{
return count;
}
}
private int removeMediaFromLib(Context context, String filePath, int fileType) {
int affectedRows = -1;
boolean isaudio = MediaFile.isAudioFileType(fileType);
boolean isvideo = MediaFile.isVideoFileType(fileType);
boolean isimage = MediaFile.isImageFileType(fileType);
Log.i(TAG, "isaudio: " + isaudio);
Log.i(TAG, "isvideo : " + isvideo);
Log.i(TAG, "isimage : " + isimage);
if (isimage) {
affectedRows = removeImageFromLib(context, filePath);
Log.i(TAG, "removeImageFromLib count: " + affectedRows);
} else if (isaudio) {
affectedRows = removeAudioFromLib(context ,filePath);
Log.i(TAG, "removeAudioFromLib count: " + affectedRows);
} else if (isvideo) {
affectedRows = removeVideoFromLib(context, filePath);
Log.i(TAG, "removeVideoFromLib count: " + affectedRows);
}
return affectedRows;
}
//[BUGFIX]-Add-END by test
MediaScanner扫描流程参考:https://blog.csdn.net/q1183345443/article/details/80257028