这几天在做Android应用的远程更新功能,将下载的更新包放在移动设备上指定的目录。用的是  Environment.getExternalStorageDirectory() 这个方法,然后在获取的目录中新建一个hkapp文件夹,用来存放下载的apk文件。

那么,这个hkapp文件到底是在那块存储区域呢?

一开始,看看网上的API,已经这个方法的字面意思,想当然地以为它就是获取SD卡上的目录,而不是手机的内部存储。当然,除了望文生义之外,似乎还有确凿的证据支持我的观点,那就是在运行的时候报错,提示权限不足,也就是要配置访问外部存储的权限:

  1. <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"></uses-permission>
  2. <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>

嗯,看上去就是在获取SD卡了...

我有两个手机:

1. 华为C8812,带SD卡,接上电脑之后显示有两个存储设备,并且识别为磁盘,其中,H盘是手机自带的,而I盘就是后来放进去的SD卡。

在程序中用了getExternalStorageDirectory()方法之后,发现hkapp文件夹的实际位置是在I盘,也就是SD卡上,OK,看上去这个getExternalStorageDirectory方法确实是获取了SD卡,而不是手机自带的存储。

2. 华为C8817,不带SD卡,接上电脑之后只显示一个设备,并且,是作为设备整体来识别,而不单单是个磁盘。

在这个C8817上运行程序之前,我是有点小担心的,因为这个手机没有SD卡啊,会不会运行到一半报错呢?那么实际的情况是,确实报错了,但报的是没有权限访问外部存储的错,于是也把权限加上去:

  1. <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"></uses-permission>
  2. <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>

然后就想了,给了你权限又有什么用呢?反正你终究是没有SD卡在里面,必然要继续报错嘛。于是重新运行,发现整个下载过程一切正常,没有报错!hkapp文件夹也正常建立了,但位置是在我原本以为的”内部存储“中,apk文件也顺利地进去了。

那么,到这里,有点错乱了,这个”getExternalStorageDirectory()“ 到底是获取外部存储还是内部存储呢?

你的apk装到哪个盘里,那个盘就认为是外部存储器,这么说,不是很准确。
可以这么说,除了你的后来装到手机上的内存卡叫sdcard外,手机本身也有sdcard的成分,手机总的存储空间分为系统空间和手机U盘空间两部分,后者手机U盘空间就是sdcard。
从你的试验中知道,如果不插内存卡(我们都知道的sdcard),还是可以获取到sdcard的总存储容量和可用容量的,这个时候,总存储容量应该是你手机总的存储容量减去系统容量;
如果,插上内存卡,但是,你把apk安装到了手机上,而不是内存卡上,那么实验结果应该是和你不插内存卡的情况一样,但若是,你把apk安装到内存卡上,这个时候,你获取的总容量就是你内存卡的总量,可用容量就是你内存卡的可用容量。

Android Environment.getExternalStorageDirectory() 获取的是内部存储还是外部存储? - z的更多相关文章

  1. Android Environment.getExternalStorageDirectory() 获取的是内部存储还是外部存储?

    这几天在做Android应用的远程更新功能,将下载的更新包放在移动设备上指定的文件夹. 用的是  Environment.getExternalStorageDirectory() 这种方法.然后在获 ...

  2. 彻底了解android中的内部存储与外部存储

    我们先来考虑这样一个问题: 打开手机设置,选择应用管理,选择任意一个App,然后你会看到两个按钮,一个是清除缓存,另一个是清除数据,那么当我们点击清除缓存的时候清除的是哪里的数据?当我们点击清除数据的 ...

  3. 彻底理解android中的内部存储与外部存储

    我们先来考虑这样一个问题: 打开手机设置,选择应用管理,选择任意一个App,然后你会看到两个按钮,一个是清除缓存,另一个是清除数据,那么当我们点击清除缓存的时候清除的是哪里的数据?当我们点击清除数据的 ...

  4. android中的文件操作详解以及内部存储和外部存储(转载)

    原文链接:http://m.blog.csdn.net/article/details?id=17725989 摘要 其实安卓文件的操作和java在pc环境下的操作并无二致,之所以需要单独讲解是因为安 ...

  5. 【转】 android中的文件操作详解以及内部存储和外部存储

    摘要 其实安卓文件的操作和Java在pc环境下的操作并无二致,之所以需要单独讲解是因为安卓系统提供了不同于pc的访问文件系统根路径的api,同时对一个应用的私有文件做了统一的管理.根据我的经验,初学者 ...

  6. 【转】彻底理解android中的内部存储与外部存储

    我们先来考虑这样一个问题: 打开手机设置,选择应用管理,选择任意一个App,然后你会看到两个按钮,一个是清除缓存,另一个是清除数据,那么当我们点击清除缓存的时候清除的是哪里的数据?当我们点击清除数据的 ...

  7. android中的内部存储与外部存储

    我们先来考虑这样一个问题: 打开手机设置,选择应用管理,选择任意一个App,然后你会看到两个按钮,一个是清除缓存,另一个是清除数据,那么当我们点击清除缓存的时候清除的是哪里的数据?当我们点击清除数据的 ...

  8. Android内存解析(二)— 详解内存,内部存储和外部存储

    总述 觉得十分有必要搞清楚内存,内部存储和外部存储的区别,还有我们在开发中真正将数据存在了手机的哪儿. 先提一个问题:手机设置的应用管理中,每个App下都有清除数据和清除缓存,清除的分别是哪里的数据? ...

  9. Android数据存储之内部存储、外部存储

    首先来介绍下什么是内部存储? 在Android平台下,有着自己独立的数据存储规则,在windows平台下,应用程序能够自由的或者在特定的訪问权限基础上訪问或改动其它应用程序下的文件资源. 可是在And ...

随机推荐

  1. HTTP 协议入门-笔记

    原文参考http://mp.weixin.qq.com/s/czx0AHaItrJ-c49XDboIUg  HTTP是基于TCP/IP协议的应用层协议,规定了客户端和服务端之间的通信格式,默认使用80 ...

  2. PHP编译安装时常见错误解决办法,php编译常见错误

    PHP编译安装时常见错误解决办法,php编译常见错误 1.configure: error: xslt-config not found. Please reinstall the libxslt & ...

  3. Android 投射工具和录屏工具

    前言 写博客,难免需要上传手机截图或者是Gif文件,分享两个常用的工具 GifCam GifCam,一个简单的 屏幕录制工具,可以实现Gif的录制编辑和保存 Total Control Total C ...

  4. maven一模块字段调用另一个模块数据生成下拉框

    店铺运营数据录入表实现的下拉框实现 从片区管理中提取分区数据,在招商管理(MIS)模块中获取并以下拉框的形式展现 ctrl类: 1.首先在ctrl类注入需提取另一模块字段的serviceclient接 ...

  5. React Native八大Demo

    参考资料:http://www.cnblogs.com/shaoting/p/7148240.html 下一个项目公司也打算使用react native.大致看了下原型设计,写几个小demo先试试水. ...

  6. JavaScript arguments对象

    1.在JavaScript中,arguments对象是比较特别的一个对象,实际上是当前函数的一个内置属性.arguments非常类似Array,但实际上又不是一个Array实例.可以通过如下代码得以证 ...

  7. qt多线程信号槽传输方式

    //简单介绍一下QT信号与槽的连接方式:    //Qt::AutoConnection表示系统自动选择相应的连接方式,如果信号与槽在同一线程,就采用Qt::DirectConnection, //如 ...

  8. 精华阅读第 13 期 |常见的八种导致 APP 内存泄漏的问题

    本期是移动开发精英俱乐部的第13期文章,都是以技术为主,所以这里就不过多的进行赘述了,我们直接看干货内容吧!本文系ITOM管理平台OneAPM整理. 实际项目中的MVVM(积木)模式–序章 导读:开篇 ...

  9. 使用 Azure Active Directory 管理 Azure 中的 HPC Pack 群集

    Microsoft HPC Pack 2016 支持在 Azure 中部署 HPC Pack 群集的管理员将其与 Azure Active Directory (Azure AD) 集成. 请按照本文 ...

  10. 反向代理负载均衡调度:nginx

    一.概述 反向代理:以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个 ...