- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想获取设备内部和外部空间的数量,在浏览了 StackOverflow 上的几篇文章后,我发现这很容易。我可以使用这个获取内部空间量:
StatFs sfsInternal = new StatFs(Environment.getRootDirectory().getAbsolutePath());
return Long.valueOf(sfsInternal.getBlockCount()) * Long.valueOf(sfsInternal.getBlockSize());
...我可以使用这个获取外部空间量:
StatFs sfsExternal = new StatFs(Environment.getExternalStorageDirectory().getAbsolutePath());
return Long.valueOf(sfsExternal.getBlockCount()) * Long.valueOf(sfsExternal.getBlockSize());
当我读到“内部”存储时,我假设它是设备上不可移动的板载存储,而“外部”是可移动闪存卡存储,但情况并非完全如此。
我发现三星设备 e.e. Galaxy Note 2,将大量内部存储显示为外部存储。这是一个讨论同一件事的答案。 https://stackoverflow.com/a/12087556/304151
如何在考虑三星 Galaxy 设备的边缘情况时获取内部存储量(板载和不可移动)和外部存储量(闪存和可移动)。我还没有在 StackOverflow 上找到为这种情况提供完整工作解决方案的答案。我的代码适用于 API 级别 17。
谢谢。
最佳答案
这是在不同设备上获取可用空间的代码,我已经在 samsung GALAXY Tab7 2.2 Froyo 和 Nexus 7 4.2.2 Jelly Beans 上测试了该代码
// calculate frespace on external storage
public static int getExternalStorageFreeSpace(String storagePath)
{
try
{
File file = new File(storagePath);
StatFs stat = new StatFs(file.getPath());
double sdAvailSize = (double) stat.getAvailableBlocks() * (double) stat.getBlockSize();
int valueinmb = (int) (sdAvailSize / 1024) / 1024;
return valueinmb;
}
catch (Exception e)
{
System.out.println("Message//////" + e.getMessage() + "Cause555555555555" + e.getCause());
}
return 0;
}
为了区分内部和外部存储,我使用了这个类和一些逻辑
public class GetRemoveableDevices
{
private final static String TAG = "GetRemoveableDevice";
public GetRemoveableDevices()
{
}
public static String[] getDirectories()
{
Log.d(TAG, "getStorageDirectories");
File tempFile;
String[] directories = null;
String[] splits;
ArrayList<String> arrayList = new ArrayList<String>();
BufferedReader bufferedReader = null;
String lineRead;
try
{
arrayList.clear(); // redundant, but what the hey
bufferedReader = new BufferedReader(new FileReader("/proc/mounts"));
while ((lineRead = bufferedReader.readLine()) != null)
{
Log.d(TAG, "lineRead: " + lineRead);
splits = lineRead.split(" ");
// System external storage
if (splits[1].equals(Environment.getExternalStorageDirectory().getPath()))
{
arrayList.add(splits[1]);
Log.d(TAG, "gesd split 1: " + splits[1]);
continue;
}
// skip if not external storage device
if (!splits[0].contains("/dev/block/"))
{
continue;
}
// skip if mtdblock device
if (splits[0].contains("/dev/block/mtdblock"))
{
continue;
}
// skip if not in /mnt node
if (!splits[1].contains("/mnt"))
{
continue;
}
// skip these names
if (splits[1].contains("/secure"))
{
continue;
}
if (splits[1].contains("/mnt/asec"))
{
continue;
}
// Eliminate if not a directory or fully accessible
tempFile = new File(splits[1]);
if (!tempFile.exists())
{
continue;
}
if (!tempFile.isDirectory())
{
continue;
}
if (!tempFile.canRead())
{
continue;
}
if (!tempFile.canWrite())
{
continue;
}
// Met all the criteria, assume sdcard
arrayList.add(splits[1]);
}
}
catch (FileNotFoundException e)
{
}
catch (IOException e)
{
}
finally
{
if (bufferedReader != null)
{
try
{
bufferedReader.close();
}
catch (IOException e)
{
}
}
}
// Send list back to caller
if (arrayList.size() == 0)
{
arrayList.add("sdcard not found");
}
directories = new String[arrayList.size()];
for (int i = 0; i < arrayList.size(); i++)
{
directories[i] = arrayList.get(i);
}
return directories;
}
}
现在我向你展示我的逻辑
String[] dirs = GetRemoveableDevices.getDirectories();
ArrayList<String> directories=new ArrayList<String>();
for(String directory:dirs)
{
if(!directory.contains("."))
directories.add(directory);
}
String externalStorage = "";
String internalStorage = "";
if (directories.size()>= 2)
{
internalStorage = directories.get(0).toString();
externalStorage = directories.get(1).toString();
}
else if (directories.size() < 2)
{
internalStorage = directories.get(0).toString();
externalStorage = null;
}
希望对你有帮助
关于java - 在考虑 Galaxy 设备的边缘情况时,如何获得正确的设备内部和外部空间量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17402929/
我想在 galaxy fold 设备上查看我的页面时更改它的字体大小。但我不确定如何使用媒体查询来处理这个问题。任何人都可以帮助我并告诉我如何解决这个问题吗? 最佳答案 如果您需要对折叠版设备进行媒体
我想在 galaxy fold 设备上查看我的页面时更改它的字体大小。但我不确定如何使用媒体查询来处理这个问题。任何人都可以帮助我并告诉我如何解决这个问题吗? 最佳答案 如果您需要对折叠版设备进行媒体
我正在开发 Android Widget,需要区分 Galaxy S 和 Galaxy S2。我几乎阅读了所有关于屏幕尺寸和密度的文章。当然,我需要将新限定词与新限定词 Smallest Width
如何为 galaxy S3(720x1280 像素)和 galaxy Note(800x1280 像素)进行布局。 两者都是超高密度设备,因此我需要将两种设备的两组图像放在同一个文件夹 drawabl
我正在使用以下设置来初始化 MediaRecorder .我的应用程序在除三星以外的大多数设备上都能正常运行,并且在 MediaRecorder.stop() 上出现错误. recorder
我在连接到我的服务器以检查我的电话应用程序的凭据时遇到问题,我正在使用 phonegap 来开发它。 我已经检查过这些问题,但它们没有给我我正在寻找的东西 HTTP Requests in Phone
我想知道为什么 Galaxy S3 和 S4 从这个文件夹 (drawable-sw360dp-xhdpi) 获取图像?? 所有图像对于这些设备来说都显得非常大!另外,如果我将这些图像缩小,它们将不适
根据我的发现,Samsung galaxy s2 的分辨率为 480x800,而 s3 的分辨率为 1280x720。所以我认为我应该让我的图形设计师为我提供包含 480x800 背景图像的 hdpi
我有一部搭载 Android 4.0.2 和 NXP 演示板 PN532-C106 的 Galaxy Nexus 手机。 我正在尝试连接它们以使用 LLCP 协议(protocol)发送数据,我正在使
我在区分 samsung galaxy s4 和 samsung galaxy s3 的布局文件夹时遇到问题。我尝试过 layout-sw360dp、layout-sw360dp-xxhdpi、lay
我已经实现了一个 android 应用程序来在网络摄像头之间切换。我使用此代码 Android ICS and MJPEG using AsyncTask .它工作得很好。但是现在的问题。在对 Sam
我有一个奇怪的问题。我正在检索推特,它可以在模拟器和我的 Samsung Galaxy S 上运行,但它不能在我的 Galaxy Tab 10.1 上运行? 手机和标签页上都安装了相同的应用程序。从
我正在使用 FLASH_MODE_ON 打开相机 LED 灯。 三星 Galaxy Ace 只有三种闪光模式:开、关和自动。 FLASH_MODE_TORCH在三星 Galaxy Tab 和三星 Ga
我在安装以超时结束的 ansible 集合时遇到问题 # ansible-galaxy collection install community.general -vvvv ansible-galax
我正在尝试部署一个通过运行meteor部署appname创建的新应用程序,但它给了我这个错误...我使用我的meteor开发者用户名和密码登录... 我必须注册 Galaxy,还是无需注册就可以免费完
我正在尝试安装 Ansible Galaxy 集合,但我需要强制执行旧版本。 According to the documentation ,我尝试通过以下方式执行安装: $ ansible-gala
我正在尝试安装 Ansible Galaxy 集合,但我需要强制执行旧版本。 According to the documentation ,我尝试通过以下方式执行安装: $ ansible-gala
我的 friend 用他的新 galaxy 选项卡试用了我的应用程序,它似乎与我测试它的模拟器略有不同。他的应用程序选项菜单是黑色的,而不是白色背景,你无法真正看到任何选项,而且大多数应用程序都无法正
我是Andoid新手我想为 Galaxy 选项卡设计布局以及其他布局。我设计了四种布局Layout-small、large、xlarge 和 normal 布局。但是当我试图在 Galaxy 选项卡中
我想要做的就是有一个特定于桌面的版本,然后是一个可以在 iPhone、Android、iPad 和任何其他手持设备上运行的移动版本。 我现在检测桌面的是: @media only screen and
我是一名优秀的程序员,十分优秀!