Android获取USB设备内存的总大小和可用大小

时间:2012-07-12 12:16:48

标签: android usb

通过编程方式访问USB设备内存。

  1. 获取USB设备总内存大小。
  2. 获取USB设备总免费(可用)内存大小。
  3. 我知道内部/外部存储器的存储器大小

    File path = Environment.getDataDirectory();
    StatFs stat = new StatFs(path.getPath());
    long blockSize = stat.getBlockSize();
    long availableBlocks = stat.getAvailableBlocks();
    String availableMemory =  Formatter.formatFileSize(this, availableBlocks * blockSize);
    Log.i("","Available MB : " + availableMemory);
    

    在此代码中,无法识别USB设备内存。

    如何找到USB Device Memory

    提前致谢。

3 个答案:

答案 0 :(得分:2)

您好请使用以下代码...

     StatFs statFs = new StatFs(Environment.getExternalStorageDirectory().getAbsolutePath());        
     long blockSize = statFs.getBlockSize();
     long totalSize = statFs.getBlockCount()*blockSize;
     long availableSize = statFs.getAvailableBlocks()*blockSize;
     long freeSize = statFs.getFreeBlocks()*blockSize;

如果你对MB很好,那么

long megAvailable = availableSize/ (1024 * 1024);
Log.e("","Available MB : "+megAvailable);

答案 1 :(得分:2)

使用此助手类使用StatFs类:

public class MemoryUsage{
        /*
        Returns size in MegaBytes.

       */
            public int TotalMemory()
            {
                StatFs statFs = new StatFs(Environment.getExternalStorageDirectory().getAbsolutePath());    
                int Total = (statFs.getBlockCount() * statFs.getBlockSize()) / 1048576;
                return Total;
            }

            public int FreeMemory()
            {
                StatFs statFs = new StatFs(Environment.getExternalStorageDirectory().getAbsolutePath()); 
                int Free  = (statFs.getAvailableBlocks() * statFs.getBlockSize()) / 1048576;
                return Free;
            }

            public int BusyMemory()
            {
                StatFs statFs = new StatFs(Environment.getExternalStorageDirectory().getAbsolutePath());    
                int Total = (statFs.getBlockCount() * statFs.getBlockSize()) / 1048576;
                int Free  = (statFs.getAvailableBlocks() * statFs.getBlockSize()) / 1048576;
                int Busy  = Total - Free;
                return Busy;
            }
}

如果您需要计算内部记忆,请更改:

 StatFs statFs = new StatFs(Environment.getExternalStorageDirectory().getAbsolutePath());

到此:

 StatFs statFs = new StatFs(Environment.getRootDirectory().getAbsolutePath());

答案 2 :(得分:1)

你需要比“不工作”更具体。

  1. 你发现了什么行为?
  2. 你得到错误,或者你得到零?
  3. 您使用的是模拟器还是设备?
  4. 您使用的是具有多个外部存储的系统吗?
  5. 一个很好的例子:Android get free size of internal/external memory

    此外,如果未将默认存储设置为USB设备,则难以检测USB设备。所有Environment。*文件夹/路径API都将返回

    参考:http://developer.android.com/reference/android/os/Environment.html#getExternalStorageDirectory()

      

    注意:不要在这里混淆“外部”这个词。这个目录   可以更好地被视为媒体/共享存储。它是一个文件系统   可以容纳相对大量的数据,并且可以共享   所有应用程序(不强制执行权限)。传统上这是   SD卡,但它也可以作为内置存储器实现   与受保护的内部存储区别的设备,可以是   作为文件系统安装在计算机上。

    然后还有另一个API可能是您要检查的而不是数据目录。

    参考:http://developer.android.com/reference/android/os/Environment.html#getExternalStoragePublicDirectory(java.lang.String)

    摩托罗拉提供了处理此类案件的特定API,但根据您的具体问题,这可能不再符合您的要求:http://developer.motorola.com/docs/motorola-external-storage-api/

    在任何情况下,我希望这有助于解决您的问题。如果没有,请提供更多信息,StackOverflow的优秀人员将以他们惯常的方式提供帮助。

    希望这有帮助。