0

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

  1. 获取 USB 设备总内存大小。
  2. 获取 USB 设备总可用(可用)内存大小。

我知道内部/外部存储器的内存大小

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

提前致谢。

4

3 回答 3

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);
于 2012-07-12T12:22:57.263 回答
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());
于 2012-07-12T12:28:27.793 回答
1

您需要比“不起作用”更具体。

  1. 你发现了什么行为?
  2. 你得到了一个错误,还是你得到了零?
  3. 你用的是模拟器还是设备?
  4. 您使用的是具有多个外部存储的系统吗?

一个很好的例子:Android 获得内部/外部内存的可用大小

此外,如果未将默认存储设置为 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 的优秀人员将以他们通常的出色方式提供帮助。

希望这可以帮助。

于 2012-07-12T12:48:33.907 回答