android studio app读写sd卡文件
工作需要搭建了一个android studio环境(jni环境配置右面有空再讲)。目前Demo app有两个简单需求,一个是调用OpenCV读取手机sd卡图片,一个是读取手机下的Json文件,这里记录一下踩到的坑。
注:模拟器android版本13.0
app读取图片设置
1, AndroidMainfest.xml中,添加如下权限:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
2,打开模拟器,上滑打开settings——apps——你的app名称——Permissions,可以看到多出了一个Photos and Videos权限,允许即可。
3,在android studio工程中,点击View——tool Windows——Device File Explorer窗口,可以看到如下界面,放入其中的0D08-311D下的Pictures目录中:
4,打开手机模拟器,files——SDcard——Pictures,即可看到该图片。同时app可以成功读取该图片。
app读取Json文件
同样的方法,尝试读取Json文件就不行了,始终显示没有读取权限。查询以后还是android权限设置的问题,修改方法如下:
1,AndroidMainfest.xml中,按如下方式添加权限:
<uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" tools:ignore="ScopedStorage" />
2,打开模拟器,上滑打开settings——apps——你的app名称——Permissions,可以看到相比值钱多出了一个File权限,允许即可。
3,之后按1.3步骤放到模拟器中的文件,app就可以正常读取了。
总结
android 对于app权限做了修改,在android 10.0前,android.permission.WRITE_EXTERNAL_STORAGE就是读取SD卡的权限,但是10.0及以后权限设置更为严格。测试下来WRITE_EXTERNAL_STORAGE权限目前只包含了读取视频和图片/音频的权限。作为android 11.0的新特性,加入了tools:ignore=“ScopedStorage”,可以使app拥有读取SD卡的权限
(备注:又查了大佬的文章,一般app不应该申请SD卡权限,这里就是Demo样例的临时需求)
参考博客
1,https://blog.51cto.com/lozn/5883878
2,https://blog.csdn.net/guolin_blog/article/details/113954552