zoukankan      html  css  js  c++  java
  • Android4.4访问外部存储

    在Android 4.4系统中,外置存储卡(SD卡)被称为二级外部存储设备(secondary storage),应用程序已无法往外置存储卡(SD卡)写入数据,并且WRITE_EXTERNAL_STORAGE只为设备上的主要外部存储(primary storage)授予写权限,对于其他外部存储,其上的文件属性都改为基于文件夹结构,应用无需获取WRITE_EXTERNAL_STORAGE权限,但可以管理与自己包名相关的文件夹。举例来说,如果应用的包名是com.example.externalstorage,那么外部存储上的Android/data/com.example.externalstorage/文件夹就是它的了,可随意访问,无需权限。另外需要特别注意的是,应用卸载的时候,在SD卡上创建的相应文件夹、数据都会被同时完全删除。

    例外,在Android 4.4里,系统应用(指有platform签名,或预装在/system/priv-app目录下的应用)可以通过使用WRITE_MEDIA_STORAGE权限获取完全读写SD卡的权限。

    Android 4.4增加了下面的函数访问外部存储:

    Context.getExternalFilesDirs(null), 返回多个sd卡的该应用私有数据区的files目录 

    /storage/sdcard0/Android/data/<包名>/files

    /storage/sdcard1/Android/data/<包名>/files

     

    Context.getExternalCacheDirs(), 返回多个sd卡下该应用私有数据库的缓存目录

    /storage/sdcard0/Android/data/<包名>/caches

    /storage/sdcard1/Android/data/<包名>/caches

     

    Context.getObbDirs(), 返回多个sd卡下obb目录下的私有数据(该目录一般是游戏的数据包目录)

    /storage/sdcard0/Android/obb/<包名>

    /storage/sdcard1/Android/obb/<包名>

     

    通过上面的函数在我的Android 5.1的系统上可以正确获取sd卡路径,但是在Android4.4系统上只能看到内部存储的路径。

       

     

    根据网上的资料,Android 4.4以后可以通过修改系统文件来管理sd卡,方法如下:

    1 <permission name="android.permission.WRITE_EXTERNAL_STORAGE" >
    2         <group gid="sdcard_r" />
    3         <group gid="sdcard_rw" />
    4         <group gid="media_rw" />
    5     </permission>

    修改/system/etc/permissions/platform.xml文件的android.permission.WRITE_EXTERNAL_STORAGE节点,增加<group gid="media_rw" />(需要root权限)。

    修改完后应用就可以随意控制sd卡了。

     

  • 相关阅读:
    Git 快速入门
    【工具软件】-Win10 应用软件找不到映射网络驱动器的解决方法
    Java笔记(十五)……面向对象IV多态(polymorphism)
    Java笔记(十四)……抽象类与接口
    Java笔记(十三)……面向对象III继承(inheritance)
    Java笔记(十二)……类中各部分加载顺序及存放位置问题
    Java笔记(十一)……单例设计模式
    Java笔记(十)……面向对象II封装(Encapsulation)
    Java笔记(九)……面向对象I
    Java笔记(八)……数组
  • 原文地址:https://www.cnblogs.com/l2rf/p/5997264.html
Copyright © 2011-2022 走看看