三星Galaxy S3有一个extrenal SD卡插槽,安装到/mnt/extSdCard.
我的问题是:如何通过类似的方式获得这条路径Environment.getExternalStorageDirectory()?这将返回mnt/sdcard,我找不到外部SD卡的API.(或某些平板电脑上的可移动USB存储器)
谢谢!
我想以编程方式获取设备内部/外部存储空闲内存的大小.我正在使用这段代码:
StatFs stat = new StatFs(Environment.getExternalStorageDirectory().getPath());
long bytesAvailable = (long)stat.getBlockSize() *(long)stat.getBlockCount();
long megAvailable = bytesAvailable / 1048576;
Log.e("","Available MB : "+megAvailable);
File path = Environment.getDataDirectory();
StatFs stat2 = new StatFs(path.getPath());
long blockSize = stat2.getBlockSize();
long availableBlocks = stat2.getAvailableBlocks();
String format = Formatter.formatFileSize(this, availableBlocks * blockSize);
Log.e("","Format : "+format);
Run Code Online (Sandbox Code Playgroud)
而我得到的结果是:
11-15 10:27:18.844: E/(25822): Available MB : 7572
11-15 10:27:18.844: E/(25822): Format : 869MB
Run Code Online (Sandbox Code Playgroud)
问题是我想获得1,96GB现在的SdCard的免费记忆.如何修复此代码,以便获得免费大小?
我想打开外部存储目录路径以编程方式保存文件.我试过但没有获得SD卡路径.我怎么能这样做?有什么解决方案吗?
private File path = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES) + "");
Run Code Online (Sandbox Code Playgroud)
要么
private File path = new File(Environment.getExternalStorageDirectory() + "");
Run Code Online (Sandbox Code Playgroud)
我尝试从两个方法上面获取路径,但两者都指向内部存储器.
当我们打开存储器时,如果sdcard没有,它将显示如下 -

设备存储和SD存储卡.
我想通过编码获得sd内存路径.我已经在清单中给予了许可 -
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
Run Code Online (Sandbox Code Playgroud) 我想获取连接到Android设备的所有存储设备的列表.
例如 - 内部存储(存储所有文件夹,如下载,DCIM等),SD卡和OTG设备.
我知道有很多StackOverflow帖子讨论了这个主题,但没有一个可以满足我的目的,如上所述.
我可以通过调用Environment.getExternalStorageDirectory().getPath()返回内部存储的路径来获取内部存储.
对此的任何帮助都将非常感激,因为没有标准的AFAIK可以使用它来检索所有连接的存储设备的列表.
此外,许多解决方案不适用于不同的设备和Android版本.
参考:http://developer.android.com/reference/android/os/Environment.html#getExternalStorageDirectory()
寻址具有多个"外部"存储目录的设备的段落有一个悬而不决的句子,解释了如何处理二级存储:
"在具有多个"外部"存储目录的设备中,此目录表示用户将与之交互的"主"外部存储.可通过"访问辅助存储"
"穿过"之后会发生什么?
如果有人知道访问辅助存储的方法是什么,请在此处回答.
谢谢.
我正在尝试将文件存储到外部存储(Android 4.2.2).
我在manifest.xml中使用了正确的权限:
<manifest ...>
...
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
...
Run Code Online (Sandbox Code Playgroud)
外部SD卡可用,我可以使用其他应用程序来读取和写入文件.路径/ mnt/extsd /有效,请看下面的图片.外部SD卡是可写的,因为我可以将文件复制/粘贴到其中.

代码:
try {
String path = "/mnt/extsd/file.dat"
File f = new File(path);
f.createNewFile();
return true;
} catch (Exception e) {
e.printStackTrace();
return false;
}
Run Code Online (Sandbox Code Playgroud)
我收到错误f.createNewFile();:
W/System.err(2172): java.io.IOException: open failed: EACCES (Permission denied)
W/System.err(2172): at java.io.File.createNewFile(File.java:948)
W/System.err(2172): at solarapp.activities.settings.application.ActivityBackup$BackupTask.doInBackground(ActivityBackup.java:77)
W/System.err(2172): at solarapp.activities.settings.application.ActivityBackup$BackupTask.doInBackground(ActivityBackup.java:1)
W/System.err(2172): at android.os.AsyncTask$2.call(AsyncTask.java:287)
W/System.err(2172): at java.util.concurrent.FutureTask.run(FutureTask.java:234)
W/System.err(2172): at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230)
W/System.err(2172): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080)
W/System.err(2172): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573)
W/System.err(2172): at java.lang.Thread.run(Thread.java:856)
W/System.err(2172): Caused by: …Run Code Online (Sandbox Code Playgroud) 我正在尝试获取 Android 设备的内部和外部存储路径。
这就是我在大多数设备中获取内部存储路径的方式
Environment.getExternalStorageDirectory().getPath()
Run Code Online (Sandbox Code Playgroud)
上述方法适用于大多数设备,但某些设备此方法会出现问题,即它返回 SD 卡路径。
有人可以告诉我如何准确获取那些Environment.getExternalStorageDirectory().getPath()返回外部存储路径(SD 卡路径)的设备中的内部存储路径。
我也知道,Environment.getDataDirectory().getPath()但此方法返回值类似于/data同一 Environment.getExternalStorageDirectory().getPath()设备返回/storage/sdcard0的值,当 SD 卡不存在时,该值指向内部存储,但当 SD 卡存在时,它会给出指向 SD 卡而不是内部存储的路径。
谁能帮助我理解上述两者之间的区别,并帮助我获取Android设备的内部存储路径?另外,请帮助我找到一个适用于所有设备的解决方案。
编辑:任何认为这篇文章不合适的人请发表评论并让我知道原因,以便我将来牢记这一点。
java storage android android-sdcard android-external-storage
默认情况下,Android上的"外部"存储显示为/ sdcard文件夹.在某些设备上,它不是SD卡而是内部存储器.
某些设备允许附加额外的SD卡,或者在Asus Transformer的情况下,还可以附加2个USB闪存盘.
这样添加的内存驱动器显示为某个文件夹,该位置取决于设备制造商.在某些设备上,它位于/ sdcard文件夹中,而在其他设备上则位于其他文件夹中的其他位置.
现在我的问题是,如果有一些功能可以列出除标准/ sdcard文件夹之外的所有可能的外部存储器.
我已经找到了如何使用以下任一答案获取所有存储:使用 proc/mounts和使用 mount 命令,但现在我想在返回的路径上命名。我对内部存储没有问题,但是这些方法无法区分 SD 卡和 U 盘。如果它看到连接了两个驱动器,我如何确定哪个是 SD 卡,哪个是 USB,或者它们是两个 SD 卡?还是两个U盘?