android - 我们可以将文件从 Android 共享存储复制到应用程序的文件夹吗?
问题描述
我想现在每个人都熟悉 Android 针对 api 级别 29+ 引入的最新存储更改。对于 29,他们给出了选择退出这些存储更改的标志。
对于 Android 11,我们是否允许将文件从共享存储复制到应用程序的私有文件夹?
try {
if (tempFolder.canWrite()) {
ContentValues values = new ContentValues();
values.put(MediaStore.Images.Media.DISPLAY_NAME, photoNamegagalery);
values.put(MediaStore.Images.Media.MIME_TYPE, "image/jpeg");
values.put(MediaStore.Images.Media.RELATIVE_PATH, Environment.DIRECTORY_PICTURES);
Uri uri = getContentResolver().insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values);
OutputStream imageOutStream = getContentResolver().openOutputStream(uri);
String destinationImagePath = File.separator + photoNamegagalery;
File source = new File(selectedImagePath);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
Bitmap bitmap = ImageDecoder.decodeBitmap(ImageDecoder.createSource(getContentResolver(), Uri.fromFile(source)));
try {
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, imageOutStream);
} finally {
imageOutStream.close();
}
}
}
解决方案
在 Android 11 上,您无法访问不在您的应用范围内的文件(所谓的“私人文件夹”),除非获得特殊许可。这个选择退出标志就是出于这个原因 - 您应该尽快实现一些功能,将您的数据从存储中的某个文件夹移动到您的应用程序文件夹
用于访问您仍然可以使用的照片/视频MediaStore
推荐阅读
- java - 在 glassfish 服务器中运行项目时出现 web.xml SAXParseException 错误
- python - 数据框列的日期时间从 pandas 切换到 numpy
- xslt - XSLT / 条件 for-each 具有相同的父(叔)节点值
- active-directory - 通过 Active Directory 进行网络内访问身份验证
- r - 计算要绘制的“切割”数据的平均值和四分位数范围
- scala - 播放框架 WSClient 测试
- php - laravel 雄辩的相当于 where not in multiple columns
- asp.net-core-mvc - Identity.RoleManager 类型没有服务 - Identity.IdentityRole 已注册错误
- ansible - 使用 Ansible 删除配置文件中的确切行块
- rest - 如何使用外部 api 休息?