zoukankan      html  css  js  c++  java
  • 获取Android手机中SD卡存储容量 获取剩余空间

    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 一般要安装到手机内存上才能正常运行。

  • 相关阅读:
    ASP.NET缓存:缓存ASP.NET页
    oracle小技巧:字符串原样输出
    ASP.NET缓存:概述
    如何设计表结构便于treeview显示?
    Delphi VCLSkin 界面美化
    txt文件导入存储过程
    TreeView挺入数据库
    TreeView使用笔记
    TreeView格式
    TreeView学习总结
  • 原文地址:https://www.cnblogs.com/zhoujian315/p/3304964.html
Copyright © 2011-2022 走看看