快速解决设置Android 23.0以上版本对SD卡的读写权限无效的问题

时间:2023-01-04 16:30:05

快速解决设置Android 23.0以上版本对SD卡的读写权限无效的问题

转 https://www.jb51.net/article/144939.htm

今天小编就为大家分享一篇快速解决设置Android 23.0以上版本对SD卡的读写权限无效的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
快速解决设置Android 23.0以上版本对SD卡的读写权限无效的问题

对Android的SD卡进行读取权限设置时:

1
2
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>

结果报错:

快速解决设置Android 23.0以上版本对SD卡的读写权限无效的问题

依然提示我没有权限,于是百度说是版本问题,23.0版本(笔者的版本是25.0)以上的不仅仅要设置上面的权限,还要在对SD卡有读写操作的地方授权,下面是公共类:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
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);
  }
 }
}

然后直接在需要授权的地方调用:

1
2
//检测读写权限
PermisionUtils.verifyStoragePermissions(this);

程序运行的时候,会询问是否授权

快速解决设置Android 23.0以上版本对SD卡的读写权限无效的问题

点击授权即可。

以上这篇快速解决设置Android 23.0以上版本对SD卡的读写权限无效的问题就是小编分享给大家的全部内容了,希望能给大家一个参考

本人练习一个例子源码:

package com.example.datastrorage;

import android.os.Environment;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View; import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView; import java.io.File;
import java.io.FileInputStream; import java.io.FileOutputStream;
import java.io.IOException; public class FileActivity extends AppCompatActivity {
private EditText mEtData;
private Button mBtSave;
private TextView mTvShow;
private Button mBtShow;
final String mFilename="data.txt"; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_file);
mEtData = findViewById(R.id.et_file_data);
mBtSave = findViewById(R.id.bt_file_save);
mTvShow = findViewById(R.id.tv_file_show);
mBtShow = findViewById(R.id.bt_file_show); mBtSave.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
saveData(mEtData.getText().toString());
} });
mBtShow.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) { mTvShow.setText(readData(mFilename));
} }); //检测读写权限
PermisionUtils.verifyStoragePermissions(this);
} //保存数据
private void saveData(String data){
FileOutputStream fileOutputStream = null;
        try {
//内部文件访问

//fileOutputStream = openFileOutput(mFilename, MODE_PRIVATE); 

//外部文件访问

            File dir=new File(Environment.getExternalStorageDirectory(),"save");
            if(!dir.exists()){
dir.mkdirs();
}
File file=new File(dir,mFilename);
if(!file.exists()){
file.createNewFile();
} fileOutputStream = new FileOutputStream(file);
//end-外部文件访问
            fileOutputStream.write(data.getBytes());
} catch (IOException e) {
e.printStackTrace();
} finally {
if (fileOutputStream != null) {
try {
fileOutputStream.close();
} catch (IOException e) {
e.printStackTrace();
} }
} }
//读取数据
private String readData(String mFilename){ String data=""; FileInputStream fileInputStream = null; try {
      //内部文件访问
//fileInputStream = openFileInput(mFilename);
      
//外部文件访问
            String path="";
path=Environment.getExternalStorageDirectory().getAbsolutePath();
Log.d("FileActivity",path);
File file=new File(path+File.separator+"save",mFilename);
fileInputStream = new FileInputStream(file);
      //
end-外部文件访问
            byte[] buf = new byte[1024];
int len;
StringBuilder sb = new StringBuilder("");
while ((len = fileInputStream.read(buf)) > 0) {
sb.append(new String(buf,0,len));
} data=sb.toString();
} catch (IOException e) {
e.printStackTrace();
} finally {
if (fileInputStream != null) {
try {
fileInputStream.close();
} catch (IOException e) {
e.printStackTrace();
} }
} return data; }
}

其它参考例子:

Android 4.4及以上版本写入外置SD卡问题

Android中使用SDcard进行文件的读取

Android7.0sdcard文件访问问题

Android 8.0 中如何读取内部和外部存储以及外置SDcard

快速解决设置Android 23.0以上版本对SD卡的读写权限无效的问题的更多相关文章

  1. 【译】如何在 Android 5&period;0 上获取 SD卡 的读写权限

    因为最近项目需要,涉及到 SD卡 的读写操作,然而申请 <!-- 读写权限 --> <uses-permission android:name="android.permi ...

  2. 对Android 8&period;0以上版本通知点击无效的一次分析

    版权声明:本文为xing_star原创文章,转载请注明出处! 本文同步自http://javaexception.com/archives/178 对Android 8.0以上版本通知点击无效的一次分 ...

  3. 转-Android 之 使用File类在SD卡中读取数据文件

    如果需要在程序中使用sdcard进行数据的存储,那么需要在AndroidMainfset.xml文件中 进行权限的配置: Java代码:   <!-- 在sd中创建和删除文件的权限 --> ...

  4. 【Arcgis for android】保存地图截图到sd卡

    关键词:arcgis for android ,截图,bitmap,sd卡 参考文章:http://blog.csdn.net/wozaifeiyang0/article/details/767972 ...

  5. Android—将Bitmap图片保存到SD卡目录下或者指定目录

    直接上代码就不废话啦 一:保存到SD卡下 File file = new File(Environment.getExternalStorageDirectory(), System.currentT ...

  6. Android 7&period;0以上版本 系统解决拍照的问题 exposed beyond app through ClipData&period;Item&period;getUri&lpar;&rpar;

    解决方案1: android.os.FileUriExposedException: file:///storage/emulated/0/ilive/images/photophoto.jpeg e ...

  7. Windows下Nexus 5的Android 5&period;0以上版本官方ROM的刷机教程

    博客链接:http://blog.csdn.net/qq1084283172/article/details/52334452 折腾Android逆向的时候,经常需要给Nexus 5刷机.最近给Nex ...

  8. AppCompat v21 — Android 5&period;0之前版本设备的Material Design实现

    博客原文地址:http://android-developers.blogspot.com/2014/10/appcompat-v21-material-design-for-pre.html,要想打 ...

  9. Android 9&period;0&sol;P 版本推荐使用 HttpURLConnection

    早在几年前,谷歌就推荐在Android2.3版本以上使用HttpURLConnection,而在即将正式发布的 Android P 版本中,谷歌彻底取消了对Apache HTTPClient的支持,针 ...

随机推荐

  1. Android相关小知识搜集

    adb devices得到????????????错误结果 问题: 执行adb devices后,得到如下结果:????????????        device 相关背景: AOSP:Androi ...

  2. 【总结】&period;Net面试题集锦&lpar;一&rpar;

    一.背景 最近一直在准备面试,收到的面试邀请邮件里还有面试题,真是要当面霸的节奏,不过看看也好,一方面能够锻炼锻炼生锈的脑子,查缺补漏一下,另一方面,万一靠这几个面试题拿到offer呢,哈哈.开个玩笑 ...

  3. Texstudio中文乱码问题

    参考 http://blog.csdn.net/lanbing510/article/details/8723619 1. 用XeLatex编译,这样生成的pdf没有乱码 2.在texstudio中E ...

  4. 关闭 Visual Studio 2013 的 Browser Link 功能

    最近公司弄新项目需要用 MVC,就把 IDE 升级到了 Visual Studio 2013,在开发的时候发现有好多请求一个本地49925的端口 . 很奇怪,一开始以为是 Visual Studio ...

  5. Qt 实现遥感图像显示时的连动效果

    遥感图像处理时少不了ENVI,用过ENVI的人都知道,打开图像时或图像处理完后,在缩略图上移动鼠标时,鼠标周围的图像信息会在大的视图中实时的显示,即大图会跟着小图中的鼠标移动,这即是图像的连动效果.如 ...

  6. c&num; 进行AE开发时,如何在地图上定位出一个点

    一.文本形式的气泡提示框 由于本人是初学,所以具体的含义尚未弄清楚,直接给出代码吧!

  7. RedHat7配置Nginx实现多域名虚拟主机的SSL&sol;TLS认证(实现单IP以不同证书服务于不同域名)

    以RedHat7(64bit)平台为例 如果RedHat源没法用,可以使用EPEL源 # rpm -Uvh https://dl.fedoraproject.org/pub/epel/epel-rel ...

  8. 高性能分布式执行框架——Ray

    Ray是UC Berkeley AMP实验室新推出的高性能分布式执行框架,它使用了和传统分布式计算系统不一样的架构和对分布式计算的抽象方式,具有比Spark更优异的计算性能. Ray目前还处于实验室阶 ...

  9. C&num; out关键词应用

    C#的out关键词,即是方法内赋值. 返回处理后的结果.打个比喻,有一个宽度的需要按比例缩放.标准宽度为88,如宽度大于这个标准宽度的话,按照0.8进行缩放.如果小于标准宽度,输出的结果没变化. 此时 ...

  10. UVAlive5135&lowbar;Mining Your Own Business

    好题.给一个无向图,求最少染黑多少个点后,使得任意删除一个点,每一个点都有与至少一个黑点联通. 一开始的确不知道做.看白书,对于一个联通分量,如果它有两个或以上的割点,那么这个分量中间的任何一个点都是 ...