为什么未在AndroidQ,RSDK29,30中弃用MediaScannerConnection.scanFilethis,new String [] {uri_path_or_subfolder},null,...?

问题描述

为什么MediaScannerConnection.scanFile(this,new String[] { uri_path_or_subfolder },null,... )AndroidQ,R(SDK29,30)中不是deprecated

我用

制作了一张存储在Pictures/subfolderABC中的小照片
final Uri contentUri = MediaStore.Images.Media.getContentUri("external");
Uri uri = resolver.insert(contentUri,contentValues);
//Then ... Do some works on the uri with bitmap,ParcelFileDescriptor and FileOutputStream

通过检查uri.toString();

,我确认uri不为null。

System.out.println(uri.toString());

调试对话显示content://media/external/images/media/85

在Android SDK

MediaScannerConnection.scanFile(this,new String[] { file.toString()},new MediaScannerConnection.OnScanCompletedListener() {
                                public void onScanCompleted(String path,Uri uri_local) {
                                    Log.i("ExternalStorage","Scanned " + path + ":");
                                    Log.i("ExternalStorage","-> uri=" + uri_local);
                                }
                            });

用户可以在打开图库时找到快速创建的图像,而无需等待。

所以我尝试以类似的方式在Android Q和R(SDK 29,30)中这样做...

String testingString;
switch (testingCaseNum){

    case 1: testingString = contentUri.toString(); break; //testing1
    case 2: testingString = uri.toString(); break; //testing2
    case 3: testingString = "content://media/external/images/media"; break; //testing3,should be same as 
    case 4: testingString = relativePath; break; //testing4 //relativePath = "Pictures/subfolderABC"
    case 5: testingString = "Pictures"; break; //testing5

    default:testingString = contentUri.toString(); break;
}

String testingString = contentUri.toString(); //testing
MediaScannerConnection.scanFile(this,new String[] {tesingString},new MediaScannerConnection.OnScanCompletedListener() {
         public void onScanCompleted(String path,Uri uri_local) {
             Log.i("ExternalStorage","Scanned " + path + ":");
             Log.i("ExternalStorage","-> uri=" + uri_local);
         }
     });

调试对话框显示

D/MediaScannerConnection: Scanned xxxx to null
I/ExternalStorage: Scanned xxxx:
I/ExternalStorage: -> uri=null

我花了大约12到18个小时来找出为什么模拟器返回一个空uri的问题,但是在上面的代码中,该图像具有一个生成id的uri!我以为我输入了错误的String来告诉AndroidQ扫描位置。但是在1个小时之前,我发现一位开发人员总结了Android Q在2019年的一些问题。他说,如果您输入uri,则输入的所有String路径都将返回null! 2020年10月,Android Studio没有提供任何提示或消息告诉我MediaScannerConnection.scanFileAndroidQ中不起作用或不建议使用?这浪费了我的时间,Android Studio真的知道关于scanFile的问题吗?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)