经过ARM板-RK3288和小米手机的测试。亲测可以使用。
博客中写的欠缺的地方,无所谓,直接去看代码,里面的注释很详细。程序员看代码就行了,每个函数全部封装好了,废话不多话。博客很长,大家慢慢看,看完一劳永逸,以后直接调我的函数就行了,但是讲的很详细,全部都是对比的来实现,方便大家的阅读。
总体:大家依据直接饿的需求去看
一、先大体的介绍一下理论部分,这里还是很重要的。
二、常见的存储数据的方式
三、IO 文件流的读取方式
四、sharedPreference 存储
五、SQLite的存储方式
六、assets的存储方式
七、res的存储方式
八、raw的存储方式
一、先大体的介绍一下理论部分,这里还是很重要的。
安卓存储文件、数据的地方: RAM、ROM、内存(内部存储器)、APP程序里面(Assets,raw,res),SD卡(早期的安卓的可以插卡,现在的不支持了,但是有些 arm板 嵌入式方向的还是带卡槽的),总体上来说就是这些了,网络。
接下来再细分:
1、RAM、ROM 这些东西我们就别碰了,不然一大堆问题,Environment.getRootDirectory() 需要获取root权限,不合适
2、内存和SD卡 大家得理解 Environment.getExternalStorageState() 代表的是什么意思,不是插卡的SD卡,而是说你买了开发板、手机,厂家送你的存储地方(直接你得让他送你哈)。 这部分作为主要的存储路径,小数据和大数据都适用。
3、SD卡,黑色那张卡,老古董,现在手机都没有了,不建议大家使用,非要去使用,我也写了相关的代码(根据机型,不通用,切记,不能用不能怪我,这个只提供思路)。
4、网络,请求自己的服务器,读取数据,URI的方式,httpClient post 和 get 两种请求数据的方式
存储的地方就这么多了。
二、常见的存储数据的方式
1、sharedPreference, 将数据保存为 xml 的格式,
2、数据库 将SQLite的方式
3、contentprovider APP之间交互数据的方式。(这里不讲,没有用过,没有发言权)
4、文件的读取(IO流) 和 java的操作类似。
5、Android内部的存储 assets,res, raw, 三者的区别
assets 和 raw 是不会随着 APP进行编译, res下的文件会随着app一起编译,每次 shift+alt+x 都要等好久
assets目录下可以创建子文件夹 raw 不可以
❷ android P系统WRITE_MEDIA_STORAGE添加读写SD卡权限
由于android P 版本google把android.Permission.WRITE_MEDIA_STORAGE中sd卡的读写权限移除了,导致系统文件管理中的文件无法直接复制到SD卡,所以需要把SD卡的读写权限加上到WRITE_MEDIA_STORAGE权限中去,
方法一、
1、frameworks\base\data\etc\platform.xml中添加:
2、frameworks\base\services\core\java\com\android\server\pm\PackageManagerService.java
方法二、修改system\vold\model\PublicVolume.cpp
参考:
https://blog.csdn.net/ch853199769/article/details/88052886
https://blog.csdn.net/qq_27061049/article/details/93715885
❸ Android 6.0 读写SD卡权限问题
Android 6.0 下默认存储SD卡,使用原生FMRadio生成的文件保存到内部存储中
【预置条件】插入T卡【操作步骤】设置>存储设备和USB>选择SD卡为默认存储>收音机录音【实际结果】收音机的录音文件未保存到T卡【预期结果】收音机的录音文件保存到T卡【复现概率】10/10
此外,SoundRecorder默认存储SD卡,生成的文件却可以保存到SD卡中
1、收音机文件没有保存到指定的SD卡目录下,因此可能是文件的路径不对。
2、进入设置中,切换默认存储位置,内部存储或者SD卡,每次切换都会修改系统中某一属性值。
3、当收音机文件保存的时候,必须要读取当前系统的默认存储路径,然后生成自己的文件路径。
STEP1、初步解决方案,但没有生效,引入新问题
对比 SoundRecorder ,根据GIT库中,之前的同事的修改记录,找到可能的解决方案,修改如下:
引入新的问题,此时,点击 Start Recording 会提示内部错误。
分析Log发现,由于权限拒绝,抛出IO异常
01-01 07:35:38.167 7467 7467 W System.err: java.io .IOException: open failed: EACCES (Permission denied)
STEP2、Android M 下SD卡读写权限问题
分析由于权限问题后,结合Android M new design,开始查找文档,寻找解决Android M 下SD卡读写权限问题
Android6.0中的运行时请求权限
后来,试了好几种方法,但都没有用,以及报问题“EACCES (Permission denied)”
STEP3、再分析可能是运行时权限问题
判断APP运行时权限如下:
发现此时,FMRadio对于的组权限如下:
com.android.fmradio Groups: 1013 3002 3003 9997 50010
com.android.soundrecorder Groups: 1015 1023 3003 9997 50105
根据 系统权限 的定义,有兴趣的同学可以去看一下这个文件 system/core/include/private/android_filesystem_config.h
分析这些Gid发现:
1015 为sdcard_rw,1023 为media_rw权限
因此,得出结论如下
1、首先修改AndroidManifest.xml文件,新增权限,确保FMRadio应用级的权限;
2、原生FMRadio使用过程中,会进行运行时的权限检查,故FMRadio运行时应该拿到了WRITE_EXTERNAL_STORAGE,以及READ_EXTERNAL_STORAGE权限,
3、但是由于FMRadio本身不具备“1015,1023”组权限,这些权限无效,仍然无法对SD卡进行读写操作。
STEP4、最终解决方案
在 STEP1 的修改基础上,在框架层,权限对应组中给予FMRadio相应的组权限,新增修改如下:
frameworks/base/data/etc/platform.xml
重编framework.jar, 将修改后的jar文件push到手机,重启
此时,再检查FMRadio对于的组权限如下:
com.android.fmradio Groups: 1013** 1015 1023** 3002 3003 9997 50010
到此为止,
❹ 如何在 Android 5.0 上获取 SD卡 的读写权限
1.首先请安装「Root Explorer」这个app,它可以在已ROOT的手机中管理隐藏的系统核心档案。 2.安装完成并开启Root Explorer以後,展开「/system/etc/permissions/」路径,然後在「platform.xml」上长按。 3.跳出「Options」选单以後,先按一下「Permissions」,我们要更改档案的权限才能写入文字。 4.此时会跳出一个警告讯息,告知你目前系统内的档案为唯读模式,需先更改为读写模式,按下「Yes」即可更改。 5.更改完成以後,将「Read」、「Write」、「Execute」项目都勾起来,然後按一下「OK」。 6.权限更改完成以後,再次在「platform.xml」上长按一次。 7.跳出「Options」选单以後,这次我们点击「Open With」,选择用哪个app开启此档案。 8.看到显示了一堆app,我们选择用「Text Viewer」来开启,如果读者们有其他的文字编辑app,也可以用它来开启。 9.找到以下两段文字以後,将内容改成跟底下一样: <permission name="android.permission.WRITE_EXTERNAL_STORAGE" > <group gid="sdcard_r" /> <group gid="sdcard_rw" /> <group gid="media_rw" /> </permission> <permission name="android.permission.WRITE_MEDIA_STORAGE" > <group gid="sdcard_rw" /> <group gid="media_rw" /> </permission> 10.更改完成以後,点击一下叫出选单,点击「Save Changes」储存更改,然後离开即可。 11.储存成功以後,可以看到资料夹中多了一个「platform.xml.bak」档案,往後要还原时,只要将「platform.xml」删除,然後把「platform.xml.bak」更改回原来名称即可。 12.最後重新开启手机,即可让设定生效罗! NOTE: 坊间已经有直接可以修改SD卡写入权限的app出现,但因为安全因素,我们还是自行手动修改比较安全。
❺ 如何读取SD卡CSV文件或指定的路径在android系统
android手机获取自带存储路径和sd卡存储路径的方式是:调用Environment.getExternalStorageDirectory(),返回的存储目录并不是系统内置的SD卡目录。
1.一部分手机将eMMC存储挂载到 /mnt/external_sd 、/mnt/sdcard2 等节点,而将外置的SD卡挂载到 Environment.getExternalStorageDirectory()这个结点。
此时,调用Environment.getExternalStorageDirectory(),则返回外置的SD的路径。
2.而另一部分手机直接将eMMC存储挂载在Environment.getExternalStorageDirectory()这个节点,而将真正的外置SD卡挂载到/mnt/external_sd、/mnt/sdcard2 等节点。
此时,调用Environment.getExternalStorageDirectory(),则返回内置的SD的路径。
❻ android系统中,怎样才能将文件在sdcard中进行创建,读写,删除操作
我也遇到过,不过重启下虚拟机就可以访问了。