Android mediaScanner 删除U盘上的文件

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/q1183345443/article/details/80985545

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

猜你喜欢

转载自blog.csdn.net/q1183345443/article/details/80985545