android 7.0读写sd卡,解决安卓7.0系统写入SD卡权限失败问题

本文介绍了在Android 23.0及以上版本中,如何处理SD卡读写权限。通过在Manifest文件中声明权限并使用PermissionUtils类来检查和请求权限,确保在运行时获取到所需的存储权限,从而能够正常写入XML文件。
摘要由CSDN通过智能技术生成

如图所示,在mainfest文件中声明了SD卡的读和写权限,仍旧报错:

安卓23.0版本以上,不仅仅要设置上面的权限,还要在对SD卡有读写操作的地方授权,下面是公共类:import android.Manifest;import android.app.Activity;import android.content.pm.PackageManager;import android.support.v4.app.ActivityCompat;public class PermisionUtils {

// Storage Permissions

private static final int REQUEST_EXTERNAL_STORAGE = 1;    private static String[] PERMISSIONS_STORAGE = {

Manifest.permission.READ_EXTERNAL_STORAGE,

Manifest.permission.WRITE_EXTERNAL_STORAGE};    /**

* Checks if the app has permission to write to device storage

* If the app does not has permission then the user will be prompted to

* grant permissions

*

* @param activity

*/

public static void verifyStoragePermissions(Activity activity) {        // Check if we have write permission

int permission = ActivityCompat.checkSelfPermission(activity,

Manifest.permission.WRITE_EXTERNAL_STORAGE);        if (permission != PackageManager.PERMISSION_GRANTED) {            // We don't have permission so prompt the user

ActivityCompat.requestPermissions(activity, PERMISSIONS_STORAGE,

REQUEST_EXTERNAL_STORAGE);

}

}

}

然后直接在需要授权的地方调用:verifyStoragePermissions(this);

在SD卡写入xml文件//生成XML文件

public void click(View v) throws IOException {

//获取实例

try {

verifyStoragePermissions(this);//请求写入权限

XmlSerializer serializer = Xml.newSerializer();

//设置序列化

File file = new File(Environment.getExternalStorageDirectory().getPath(), "texe.xml");

FileOutputStream fos = new FileOutputStream(file);

serializer.setOutput(fos, "utf-8");

//写文件头

serializer.startDocument("utf-8", true);

//写根节点

serializer.startTag(null, "smss");

serializer.startTag(null, "sms");

serializer.text("知乎");

serializer.endTag(null, "sms");

serializer.endTag(null, "smss");

fos.close();

System.out.println("保存成功");

} catch (Exception e) {

System.out.println("保存失败");

System.out.println("--------------------------------------------");

e.printStackTrace();

System.out.println("-----------------------------------");

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值