SD卡作为手机的扩展存储设备,在手机中充当硬盘角色,可以让我们手机存放更多的数据以及多媒体等大体积文件。因此查看SD卡的内存就跟我们查看硬盘的剩余空间一样,
是我们经常操作的一件事,那么在Android开发中,我们如何能获取SD卡的内存容量呢?
要操作Sdcard首先要获得访问Sdcard的权限,因此在AndroidManifes.xml中添加权限
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
其次,要判断Sdcard是否存在,存在Sdcard的情况我们才能访问,因此这里要用if判断
//得到外部储存sdcard的状态 private String sdcard=Environment.getExternalStorageState(); //外部储存sdcard存在的情况 private String state=Environment.MEDIA_MOUNTED;
获取Sdcard的路径
//获得路径 File file=Environment.getExternalStorageDirectory(); statFs=new StatFs(file.getPath());
获得Sdcard总容量,我这里封装成了一个方法
/** * SDCard 总容量大小 * @return MB */ private long getTotalSize() { if(sdcard.equals(state)) { //获得sdcard上 block的总数 long blockCount=statFs.getBlockCount(); //获得sdcard上每个block 的大小 long blockSize=statFs.getBlockSize(); //计算标准大小使用:1024,当然使用1000也可以 long bookTotalSize=blockCount*blockSize/1000/1000; return bookTotalSize; }else { return -1; } }
Sdcard的剩余大小,这里也封装成了一个方法
/** * 计算Sdcard的剩余大小 * @return MB */ private long getAvailableSize() { if(sdcard.equals(state)) { //获得Sdcard上每个block的size long blockSize=statFs.getBlockSize(); //获取可供程序使用的Block数量 long blockavailable=statFs.getAvailableBlocks(); //计算标准大小使用:1024,当然使用1000也可以 long blockavailableTotal=blockSize*blockavailable/1000/1000; return blockavailableTotal; }else { return -1; } }
有些应用能安装到SD卡上,有些不能,这其中有一定规则。如何判断?
Google 默认 PackageManager 管理安装包的机制如下:在 AdroidManifest.xml 里面定义安装位置可以有四种情况:
1. 如果没有定义安装位置,表示安装在手机内存上;
2. android:installLocation = "auto",表示先查看手机内存是否足够,如果够就安装在手机内存上,不够就安装在 T 卡上;
3. android:installLocation = "internalOnly",表示安装在手机内存上;
4. android:installLocation = "preferExternal" ,表示安装在 T 卡上;
如果 apk 的 AndroidManifest.xml 里面定义 android:installLocation = "internalOnly",那么无论用户选择安装在什么地方,该apk 都会安装到手机上,这样做的好处是避免程序运行错误,因为定义android:installLocation = "internalOnly" 的 apk 一般要安装到手机内存上才能正常运行。