java - 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 上它不起作用。
解决方案
最后,我认为问题仅来自平板电脑 Archos:我刚刚使用 WhatsApp 进行了测试,并且在 WhatsApp 中下载的图像也消失了......
推荐阅读
- node.js - 如何为 Microsoft 机器人创建本地 QnA 创客知识库?
- android - 如何在 onCreate() 方法中调用其方法时保持变量值不变?
- android - Android Java Firebase 像地图一样保存数据
- python - 如何将 Joblib 的 Parallel 函数映射到 PyTorch 的 DistributedDataParallel
- javascript - 如何修复 handleChange 方法以将用户的输入输出到所需的结果?
- php - ACCESS_REFUSED - 使用身份验证机制 AMQPLAIN 拒绝登录
- git - 为 Windows 10 安装 Git 时出错
- ajax - 从 Postman 到 AEM Forms 的 GET 请求正在运行,但由于来自另一个网站的 Ajax 调用的 CORS 而失败
- javascript - Electron app Express 服务器对 GET 请求很慢
- javascript - 防止组件在上下文更改时重新加载 (React)