zoukankan      html  css  js  c++  java
  • 应用数据存储到sdcard上一定要规范,android4.4.2有新规范

    如果你的android设备有内部存储空间,即通常所说的机身存储(这就是指主要外部存储),那么你从外部插入SD卡就是一个二级外部存储设备

    最新的Android 4.4系统中,外置存储卡(SD卡)被称为二级外部存储设备,新版本的API改进后应用程序已无法往外置存储卡(SD卡)的根目录写入数据。但若应用程序能够携带自己的包名并附加在根目录后面,即能在二级外部存储设备中创建、修 改、删除数据,如应用包名为 com.example.foo,则此应用即可以自由访问外部sdcard上的Android/data/com.example.foo/,且不需要申明权限,这个机制是由android系统包装的FUSE文件系统完成的。

    另外,READ_EXTERNAL_STORAGE、WRITE_EXTERNAL_STORAGE只为设备上的主要外部存储(机身存储)授予写权限。

    往同时含有主要外部存储及二级外部存储的android设备写入文件的步骤如下:

    0、声明 READ_EXTERNAL_STORAGE、WRITE_EXTERNAL_STORAGE 两个权限

    1、分别获取到 主要外部存储及二级外部存储 的根目录路径

    2、判断当前设备是不是4.4(含)以后的版本,若为4.4(含)以后的版本则继续第3步,若为4.4以前的版本则将所有获取到的根目录传递给第4步

    3、分别在这些根目录下创建一个文件名很怪异的文件,若有些根目录能创建成功(估计为主要外部存储)而有些根目录不能创建成功(估计为二级外部存储),先将创建成功了的文件删除掉,然后再将不能创建成功的根目录传递到第4步;若都能或都不能创建成功,先将创建成功了的文件删除掉,然后再将所有这些根目录传递给第4步

    4、接收到传递过来的根目录路径后,分别在这些根目录里利用 mkdir -p 创建 Android/data/应用程序包名  目录,即可得到任意系统版本下均可供应用程序读写的目录。结束。

    判断系统是否为4.4(含)以后的方法: 若 android.os.Build.VERSION.SDK_INT >= 19 为true则为4.4(含)以后的版本,否则为4.4以前的。

    若为4.4以后版本的话机,则可简单使用以下的方法:

    从4.4开始android已经支持多了sd卡(之前由厂商自己实现)

    可通过以下方法获取

    Context.getExternalFilesDirs(), 返回多个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/<包名>

    目前这些api在4.4以下的版本均为hide,需通过反射调用。

  • 相关阅读:
    body.filters 出现未指明错误
    利用sql server创建可重复运行的存储过程
    有关如何阻止ASP.NET的按钮控件提交页面的小发现
    ASP.NET 2.0中减少ViewState大小的一点小发现
    DataSet 的 Tables 属性对表名大小写敏感性的解惑[翻译]
    利用Sql Server Management Studio 创建视图的问题
    在用数据绑定的时候我为什么不能把焦点移出(Tab out)我的控件?(译)
    什么是 Change Notification,为什么它很重要(译)
    Rms For Sharepoint
    sharepoint 2010 容量边界
  • 原文地址:https://www.cnblogs.com/welhzh/p/5566853.html
Copyright © 2011-2022 走看看