如何使用介质扫描仪减少介质的扫描时间?

时间:2018-09-15 08:15:58

标签: android

我正在使用下面的代码在图像删除后扫描媒体,但是这花费了太多时间。我想在删除图像后快速更新我的图像列表。如何实现?

if (Build.VERSION.SDK_INT >= 14) {
    Log.e("-->", " >= 14");
    MediaScannerConnection.scanFile(this, new String[]{String.valueOf(Environment.getExternalStorageDirectory())}, null, new MediaScannerConnection.OnScanCompletedListener() {
        /*
         *   (non-Javadoc)
         * @see android.media.MediaScannerConnection.OnScanCompletedListener#onScanCompleted(java.lang.String, android.net.Uri)
         */
        public void onScanCompleted(String path, Uri uri) {
            Log.e("ext str gal", "Scanned " + path + ":");
            Log.e("ext str gal", "-> uri=" + uri);
        }
    });
} else {
    Log.e("-->", " < 14");
    sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED,
            Uri.parse("file://" + Environment.getExternalStorageDirectory())));
}

1 个答案:

答案 0 :(得分:0)

我找到答案了。使用ContentResolver扫描mediaStore。希望它能对某人有所帮助。

public void deleteFileFromMediaStore(final ContentResolver contentResolver, final File file) {

    String canonicalPath;
    try {
        canonicalPath = file.getCanonicalPath();
    } catch (IOException e) {
        canonicalPath = file.getAbsolutePath();
    }

    try{

        final Uri uri = MediaStore.Files.getContentUri("internal");
        final int result = contentResolver.delete(uri,
                MediaStore.Files.FileColumns.DATA + "=?", new String[] {canonicalPath});

        if (result == 0) {
            final String absolutePath = file.getAbsolutePath();

            if(!absolutePath.equalsIgnoreCase(canonicalPath)){
                contentResolver.delete(uri,
                        MediaStore.Files.FileColumns.DATA + "=?", new String[]{absolutePath});

            }
        }

//remove thumbnail of deleted image
        Intent mediaScanIntent = new   Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE);
        Uri contentUri = Uri.fromFile(file);
        mediaScanIntent.setData(contentUri);
        getContext().sendBroadcast(mediaScanIntent);


    }catch (Exception e){
        e.printStackTrace();
    }
}