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


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

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

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

    [html] view plain copy
     
    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卡啊,会不会运行到一半报错呢?那么实际的情况是,确实报错了,但报的是没有权限访问外部存储的错,于是也把权限加上去:

    [html] view plain copy
     
    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安装到内存卡上,这个时候,你获取的总容量就是你内存卡的总量,可用容量就是你内存卡的可用容量。

  • 相关阅读:
    1-命令格式
    android default_workspace.xml
    多维算法思考(二):关于八皇后问题解法的探讨
    C#对excel的操作
    c#读取xml操作
    一个用 C# 实现操作 XML 文件的公共类代码
    如何使用 LINQ 执行插入、修改和删除操作
    C#--编程
    LINQ常用操作
    用线性组合表示两个数的最大公约数
  • 原文地址:https://www.cnblogs.com/EasyLive2006/p/7423054.html
Copyright © 2020-2023  润新知