首页 > 解决方案 > Archos T101X 4G Android 10:MediaScannerConnection.scanFile 删除我添加的文件

问题描述

当我拍照时,我使用以下方法将图像保存在外部文件夹中的 DCIM / Camera 文件夹中:

方法一:

File fImage = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM) + "/Camera/image.jpg");
ContentResolver resolver = activity.getContentResolver();
Uri imageUri = FileProvider.getUriForFile(activity, BuildConfig.APPLICATION_ID + ".provider", fImage);
if(imageUri != null) {
    OutputStream fos = resolver.openOutputStream(imageUri);
    if(fos != null) {
        fos.write(bytes, 0, bytes.length);
        fos.flush();
        fos.close();        
        new SingleMediaScanner(activity, fImage);
     }
}

方法二:

File fImage = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM) + "/Camera/image.jpg");
OutputStream outputStream=null;
try {
    outputStream=new FileOutputStream(fImage);
    outputStream.write(bytes);
}finally {
    if (outputStream != null)
         outputStream.close();
    new SingleMediaScanner(activity, fImage);
}

我的文件存在于平板电脑上所需的文件夹中。

我的提供程序包含以下内容:

<?xml version="1.0" encoding="utf-8"?>
<paths xmlns:android="http://schemas.android.com/apk/res/android">
    <external-path name="external_files" path="."/>
</paths>

在我的清单中有这样的:

<uses-sdk
    android:minSdkVersion="22"
    android:targetSdkVersion="30" />
...
<uses-permission
    android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
...
<application
        ...
        android:requestLegacyExternalStorage="true"
        android:preserveLegacyExternalStorage="true">
...
</application>

我的班级允许文件扫描:

public static class SingleMediaScanner implements MediaScannerConnection.MediaScannerConnectionClient {

        private MediaScannerConnection mMs;
        private File mFile;

        public SingleMediaScanner(Context context, File f) {
            mFile = f;
            mMs = new MediaScannerConnection(context, this);
            mMs.connect();
        }

        @Override
        public void onMediaScannerConnected() {
            String extension = FilenameUtils.getExtension(mFile.getAbsolutePath()).toLowerCase();
            MimeTypeMap mimeTypeMap = MimeTypeMap.getSingleton();
            String mimeType = mimeTypeMap.getMimeTypeFromExtension(extension);
            mMs.scanFile(mFile.getAbsolutePath(), mimeType);
        }

        @Override
        public void onScanCompleted(String path, Uri uri) {
            mMs.disconnect();
        }
}

扫描后,我创建的文件被删除。并且在 onScanCompleted 中 uri 的值为 null。

你知道为什么吗 ?

编辑: 我在三星 Tab A 上测试过,没有问题。但是在爱可视 T101X4G 上它不起作用。

标签: javaandroidfilestorageandroid-10.0

解决方案


最后,我认为问题仅来自平板电脑 Archos:我刚刚使用 WhatsApp 进行了测试,并且在 WhatsApp 中下载的图像也消失了......


推荐阅读