Android 10 11 删除本地照片方法

关于分区存储

对于媒体文件的修改在代码和应用层面的不同,将取决于分区存储是否启用:
Scoped Storage分区存储 在Android10开始引入,在Android11开始强制启用,是系统为了加强用户隐私保护、规整应用文件存储管理,采用的收紧外部文件的存储访问权限的方式;
对于不同设备和应用目标运行版本(targetSdkVersion),分区存储启用情况如下:

1. 启用分区存储的情况

  • 当应用运行在搭载 >= Android10(API级别29) 系统的设备 且 targetSdkVersion >= 29时,在默认情况下,启用Scoped Storage分区存储。

2. 未启用分区存储的情况

  • 当应用运行在搭载 < Android10 系统的设备 或 开发应用定义 targetSdkVersion < 29 时,默认不启用分区存储。
  • 当应用运行在搭载 >= Android10 系统的设备 但 开发应用定义 targetSdkVersion 29 时,我们可以通过在AndroidManifest.xml文件中设置 requestLegacyExternalStorage=true来关闭分区存储。如下所示:
<application
	...
	android:requestLegacyExternalStorage="true">
	...
</application>

附:
关于build.gradle中compileSdkVersion,minSdkVersion,targetSdkVersion的意义可参考:
Android targetSdkVersion你真的了解吗?
代码中判断应用运行设备的android版本(返回的是Androi版本对应的API级别):

	android.os.Build.VERSION.SDK_INT

接下来将针对开启分区存储和未启用分区存储的情况分析删除媒体文件的不同:

情景1:启用分区存储

权限申请

为了访问由其他应用创建的文件,我们需要申请读取权限:READ_EXTERNAL_STORAGE
在启用分区存储的情况下,我们应仅针对搭载 Android 9(API 级别 28)或更低版本的设备请求写权限1WRITE_EXTERNAL_STORAGE
在代码中,我们可以使用maxSdkVersion进行限制:

<!-- AndroidManifest.xml中:-->
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"
                 android:maxSdkVersion="28" />

运行时权限申请

private static final List<String> PERMISSIONS_LIST = new ArrayList<>();
PERMISSIONS_LIST.add("android.permission.READ_EXTERNAL_STORAGE");
if (android.os.Build.VERSION.SDK_INT <= android.os.Build.VERSION_CODES.P) {
   
	PERMISSIONS_LIST.add("android.permission.WRITE_EXTERNAL_STORAGE");
}

获取权限方法:

/**
 * 若没有权限则发起权限申请
 * @param context 响应请求回调事件页面context
 * @param permissionList 权限列表
 * @param REQUEST_CODE 请求标识
 * @return 申请前是否已有权限
 */
public boolean verifyPermissions(Context context, String[] permissionList, int REQUEST_CODE) {
   
    // 缺少权限,弹出对话框申请权限
    if (!isPermissionGranted(permissionList)) 
  • 1
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 10
    评论
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值