Android 8.0 读取内部和外部存储以及外置SDcard的方法

最近碰到询问我这个读取SDcard的问题, 很久没有看这部分了,所以大致看了一下, 顺便记录一下。在Android 8.0上做了测试。

一般的Android App能读取的存储空间主要有三种:

app自己的私有目录,也就是/data/data/《app 目录》。

读写这个目录不需要单独的权限。每个app只能读写自己的目录,而不能读写其他app的目录。 Android通过Seandroid对权限进行了管理。

/sdcard。

这个其实是Android手机的internal storage。 也就是一般你买手机的时候, 说手机是64GB的存储空间,就是说的这个地方。这个地方的读写需要申请权限。READ_EXTERNAL_STORAGE 是读, WRITE_EXTERNAL_STORAGE 是写, 有写的权限就自动有读的权限。 这个权限是正对整个/sdcard,不区分子目录, 也就是说一旦你申请权限你可以对整个/sdcard上的所有文件和目录有操作权限。这个权限的管理会显示再settings里相应的app permission里。

外置sdcard

这个对应的是你放入手机sdcard插槽的microSD卡。 有时候也叫removable storage。 Android里无法通过申请权限来获取读写的权利。 这一点和上面说的2不同。 因此,如果需要获取写权限, 需要用户指定特定的目录单独授权。这里举个简单的例子。 如果外置sdcard的路径是/mnt/extsdcard,然后上面有两个目录a和b, 那么你可以让用户授权你写/mnt/extsdcard/a, 但是你还需要让用户再单独授权你写/mnt/extsdcard/b, 也就是要授权两次。 具体的实现方法, 就不多说了, google再github上给了个例子, 其中的wiki页面有比较详细的描述。

特别要说明的是, 由于这个没有对应的android permission, 所以如果你得到授权以后, 对应的目录路径不会显示再settings中的app permission。 相反, 它会显示再app storage里,用户可以在那里revoke对app的授权(同样, 也是指定目录)。这个我感觉其实不好, 因为这本质上也是权限问题, 应该都放在app permission里。

以上这篇Android 8.0 读取内部和外部存储以及外置SDcard的方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • android读取sdcard路径下的文件的方法

    复制代码 代码如下: // 读取sdcard文件private void sdcardRead(){String fileName = "/sdcard/my_sdcard.txt";// assets下文件//String fileName = "/sdcard/test/my_sdcard_test.txt";// sdcard下子目录文件String ret = "";try {FileInputStream fis = new FileI

  • Android实现内存中数据保存到sdcard的方法

    本文实例讲述了Android实现内存中数据保存到sdcard的方法.分享给大家供大家参考,具体如下: public static void writeToSdCard(String s) { try { File dst = new File("/sdcard/test_sensor/" + mName + ".txt"); File parent = dst.getParentFile(); if(!parent.exists()) { parent.mkdirs

  • Android获取内置sdcard跟外置sdcard路径

    Android获取内置sdcard跟外置sdcard路径 Android获取内置sdcard跟外置sdcard路径.(测试过两个手机,亲测可用) 1.先得到外置sdcard路径,这个接口是系统提供的标准接口. 2.得到上一级文件夹目录 3.得到该目录的所有文件夹,根据判断得到内置sdcard跟外置sdcard. 4.程序运行的时候记得给程序添加读取sdcard的权限哦. /** * 得到sdcard的路径 * @return 返回一个字符串数组 下标0:内置sdcard 下标1:外置sdcard

  • Android获取SD卡路径及SDCard内存的方法

    本文实例讲述了Android获取SD卡路径及SDCard内存的方法.分享给大家供大家参考.具体分析如下: 昨天在研究拍照后突破的存储路径的问题,开始存储路径写死为: private String folder = "/sdcard/DCIM/Camera/"(SD卡上拍照程序的图片存储路径); 后来发现这样写虽然一般不会出错,但不是很好,因为不同相机,可能路径会出问题.较好的方法是通过Environment 来获取路径,最后给出一个例子,教你怎样获取SDCard 的内存,显示出来告诉用

  • Android 获取内外SD卡路径几种方法总结

    Android 获取SD卡路径: 外置sd卡路径,也许很多同学在平时的工作中并不会用到,因为现在很多机型都不支持外置sd卡(这也是Google目标),所以并不用考虑外置sd卡的路径问题.除了开发文件管理类的应用之外,其他应用使用 Enviroment 这个类中的一些静态方法就能满足需要.但也有一些特殊需求需要用到外置sd卡路径,那怎么才能准确获得外置sd卡的路径呢? 方法一 //内置sd卡路径 String sdcardPath = System.getenv("EXTERNAL_STORAGE

  • Android 8.0 读取内部和外部存储以及外置SDcard的方法

    最近碰到询问我这个读取SDcard的问题, 很久没有看这部分了,所以大致看了一下, 顺便记录一下.在Android 8.0上做了测试. 一般的Android App能读取的存储空间主要有三种: app自己的私有目录,也就是/data/data/<app 目录>. 读写这个目录不需要单独的权限.每个app只能读写自己的目录,而不能读写其他app的目录. Android通过Seandroid对权限进行了管理. /sdcard. 这个其实是Android手机的internal storage. 也就

  • Android开发实现读取Assets下文件及文件写入存储卡的方法

    本文实例讲述了Android开发实现读取Assets下文件及文件写入存储卡的方法.分享给大家供大家参考,具体如下: 调用一个反编译的.so文件,查看起加密和解密情况,需要解析上万的数组,而so文件加密解密都是通过Byte来进行,又需要把String字符串转化为 Byte,当把数据直接写在代码中就会提示多Byte数组过大.最后把数组写到Assets文件加下,读取txt文本文件. 读取Assets方法如下: public String getFromAssets(String fileName) {

  • Android 6.0以上权限拒绝打开权限设置界面的解决方法

    本人使用小米手机,打开qq或者微信的时候,某个权限拒绝的话,会提示你开启,点击开启会跳转到app的权限设置界面,当然了,这是国内系统深层定制的原因,也就是说这个界面原声的android没有的!这里以小米和魅族作为示例讲解如何让用户手动打开权限,当然了如果是原声的android就让他跳转到应用的详情设置页面(有点坑,因为普通用户还是不知道怎么整). 参考了很多零零碎碎的东西,网址已经找不到了...... ok,第一步是跳转到系统的界面,下面基本上可以从9开始考虑了,可以简化. String SCH

  • Android 6.0动态权限及跳转GPS设置界面的方法

    1.动态权限申请 模糊的位置信息android.permission.ACCESS_COARSE_LOCATION权限为例 在AndroidManifest文件中加入权限 <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/> 然后java代码中动态申请 //动态申请权限的测试方法 public void test() { // 要申请的权限 数组 可以同时申请多个权限 Stri

  • Android开发实现加载网络图片并下载至本地SdCard的方法

    本文实例讲述了Android开发实现加载网络图片并下载至本地SdCard的方法.分享给大家供大家参考,具体如下: package com.example.myimagedemo; import java.io.BufferedOutputStream; import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; imp

  • android I/0流操作文件(文件存储)

    目录 文件存储 I/0流操作文件 总结 文件存储 文件存储方式不受类型限制,可以将一些数据直接以文件的形式保存在设备中,例如文本文件.PDF ,音频,图片等.存储类型复杂的数据时,通常采用文件存储.Java提供一套完整的I/О流体系,通过I/О流可以非常方便地访问磁盘中的文件,同样Android 也支持I/O流方式来访问手机等移动设备中的存储文件. I/0流操作文件 进行I/О流操作文件时,需要先获得文件的输人流和输出流.在Android应用程序中,可以通过上下文环境Context对象提供的op

  • Android 8.0升级不跳转应用安装页面的解决方法

    最近开发遇到了个问题,app升级的时候,其他手机都能正常升级,下载完安装包,跳到安装页面进行新版本的安装.但却有用户反映,华为P10和华为Mate 9升级时,怎么也无法跳转到安装页面.起初我以为是华为手机自身系统的问题(因为手上的华为测试机都是正常的),还特地对比了几种配置的华为手机,最后发现,是Android 8.0系统版本的锅,不是手机的问题. 2017年8月22日,Google发布了Android 8.0的正式版,其正式名称为:Android Oreo(奥利奥),Android 8.0强化

  • Android App将数据写入内部存储和外部存储的示例

    File存储(内部存储) 一旦程序在设备安装后,data/data/包名/ 即为内部存储空间,对外保密. Context提供了2个方法来打开输入.输出流 FileInputStream openFileInput(String name) FileOutputStream openFileOutput(String name, int mode) public class MainActivity extends Activity { private TextView show; private

  • Android 8.0中一些坑以及对应的解决方法

    前言 虽然 Android 9.0 都已经面世了,本篇文章写的有点迟了. 但是迟到好过不到,因此基于此这边还是记录一下项目中遇到的 Android 8.0 的坑及对应解决方法. 每次系统升级,虽然系统功能更加强大了,各方面性能也提高了. 但是对于开发者而言,一个困扰的问题也是随之而来--兼容. 尤其对于一些已经上市的 App 而言,在新系统发布之前就要了解到底有哪些改动,以避免用户升级新系统后导致 App 没法正常运行. 好了,回归主题,说说 Android 8.0 里面的几个坑吧. 唤不起系统

  • 解决android6.0以上不能读取外部存储权限的问题

    通过内容提供者获取手机sdcard本地视频时, /** * 从本地的sdcard得到数据 * //1.遍历sdcard,后缀名 * //2.从内容提供者里面获取视频 * //3.如果是6.0的系统,动态获取读取sdcard的权限 */ private void getDataFromLocal() { new Thread(){ @Override public void run() { super.run(); // isGrantExternalRW((Activity) context);

随机推荐