开外部存储访问权限

MainActivity.java
private static final int REQUEST_EXTERNAL_STORAGE = 1;
private static String[] PERMISSIONS_STORAGE = {
Manifest.permission.READ_EXTERNAL_STORAGE,
Manifest.permission.WRITE_EXTERNAL_STORAGE };
int permission = ActivityCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE);
if (permission != PackageManager.PERMISSION_GRANTED) ActivityCompat.requestPermissions(
                this,
                PERMISSIONS_STORAGE,//需要请求的所有权限,这是个数组String[]
                REQUEST_EXTERNAL_STORAGE//请求码
        );
 
AndroidManifest.xml   
   
xx    uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
xx    uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
### 如何在Android应用程序中请求外部存储权限 #### 请求读取外部存储权限 为了使应用能够访问设备上的文件,在`AndroidManifest.xml`文件中需添加如下代码来声明读取外部存储的权限: ```xml <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> ``` 对于需要写入操作的情况,则还需增加相应的写入权限声明[^2]。 #### 动态请求运行时权限 自Android 6.0 (API level 23)起,除了在清单文件里声明权限外,还需要向用户动态请求这些敏感权限。下面是一段用于检查并请求权限的例子: ```java // 假设当前Activity实现了OnRequestPermissionsResultCallback接口 private static final int REQUEST_READ_STORAGE = 1; if (ContextCompat.checkSelfPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) { ActivityCompat.requestPermissions( this, new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, REQUEST_READ_STORAGE); } ``` 当用户授予或拒绝该权限后,会触发回调方法`onRequestPermissionsResult()`处理用户的响应。 #### 处理高版本系统的特殊需求 从Android 10(API level 29)开始引入了分区存储的概念,默认情况下应用仅能直接访问自己创建的数据;如果确实有必要访问其他位置的内容,则应考虑使用`MANAGE_EXTERNAL_STORAGE`权限,并告知用户为何需要这项广泛的权利以及可能带来的隐私影响。 ```xml <!-- 只有当你真的需要全面管理媒体库或其他重要功能时才应该这么做 --> <uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE"/> ``` 需要注意的是,Google Play商店可能会对申请此类强力权限的应用进行更严格的审核。 #### 获取外部存储路径 一旦获得了必要的权限,就可以通过以下方式获取到外部存储的位置: ```java File externalStorageDir = Environment.getExternalStorageDirectory(); Log.d("Path", "External storage path is:" + externalStorageDir.getAbsolutePath()); ``` 这将返回一个表示SD卡或者其他形式可移动介质根目录的对象实例[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值