AndroID读写权限

在配置  READ_EXTERNAL_STORAGE 和 WRITE_EXTERNAL_STORAGE 权限时,发现申请权限时,这二项权限已经无反应了;

查看网上资料后,发现实际情况如下:

1. 在 Android 13 (API Level 33) 之前,是需要申请上述2个权限,用于读写外部存储数据;

2. 从 Android 13 开始,安卓将 READ_EXTERNAL_STORAGE  权限,作了细分

  >  READ_MEDIA_IMAGES 、  READ_MEDIA_VIDEO、READ_MEDIA_AUDIO

       >  从Android 13 开始,权限申请时,要使用上述3项(按需申请)

3. 为兼容高低不同版本的AndroID设备,需要对权限申请做识别处理 (  System.Permissions, Androidapi.Helpers, Androidapi.Jni.Os )

  > 识别依据( Delphi ): TJBuild_VERSION.JavaClass.SDK_INT;  (取的是设备的 API Level)

 1 var
 2   tmpPermissions: TArray<String>;
 3   tmpSDKVersion: Integer;
 4 begin
 5   tmpSDKVersion := TJBuild_VERSION.JavaClass.SDK_INT;
 6 
 7   if tmpSDKVersion >= 33 then // Android 13及之后
 8   begin
 9     tmpPermissions := [JStringToString(TJManifest_permission.JavaClass.CAMERA),  //相机权限
10       JStringToString(TJManifest_permission.JavaClass.READ_MEDIA_IMAGES),       //图片
11       JStringToString(TJManifest_permission.JavaClass.READ_MEDIA_VIDEO)];       //视频
12   end
13   else // AndroID 13之前
14   begin
15     tmpPermissions := [JStringToString(TJManifest_permission.JavaClass.CAMERA),    //相机
16       JStringToString(TJManifest_permission.JavaClass.READ_EXTERNAL_STORAGE),      //读 
17       JStringToString(TJManifest_permission.JavaClass.WRITE_EXTERNAL_STORAGE)];    //写
18   end;
19 
20   // 申请权限
21   Permissionsservice.RequestPermissions(tmpPermissions,
22     RequestPermissionsResult, DisplayRationale);
23 end;

4. 关于 WRITE_EXTERNAL_STORAGE 权限,按网上资料所查,此权限是会被弃用的;

    而且此权限在大多数情况下,基本不会再用到了;

 

posted @ 2024-12-07 20:49  耗喜天涯  阅读(396)  评论(0)    收藏  举报