在我的应用程序中,我通过使用以下方法访问外部存储(根据this,它可以是内部存储或SD卡的一部分),在我的Xperia V中,它返回内部存储的路径(不是SD)卡)。
String root = Environment.getExternalStorageState().toString();
当我尝试在没有安装SD卡的Galaxy笔记上运行应用程序时,我发现上面的方法没有返回存储路径。(app应该保存文件,如果它获得成功的路径)。所以我可以知道有没有一种方法可以访问外部存储器(没有安装SD卡)。?
谢谢
答案 0 :(得分:1)
获取外部存储路径尝试这样..
String root = Environment.getExternalStorageDirectory().getPath();
它将重新调整外部存储的确切路径
答案 1 :(得分:0)
首先,您的应用必须具有写入外部存储的权限,它在清单文件中指定,请参阅以下内容:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
其次,我们应该检查外部媒体是否已挂载,请查看我的某个Android应用程序的工作片段,它将在外部存储上为您创建目录(如果尚不存在),否则返回该目录的File对象。
File getRecordingDirectory()
{
File recordingDir = null;
// get the state of external storage
String externalStorageState = Environment.getExternalStorageState();
if(externalStorageState.equals(Environment.MEDIA_MOUNTED))
{
File extDir =
Environment.getExternalStorageDirectory();
recordingDir = new File(extDir, "AudioRecorder");
if(!recordingDir.exists())
{
if(!recordingDir.mkdirs())
{
Log.e("RECORDER", "Unable to create Silent Recorder recordings directory.");
}
}
}
return recordingDir;
}
答案 2 :(得分:0)
private String getInternalSDPath() {
File file = new File("/system/etc/vold.fstab");
FileReader fr = null;
BufferedReader br = null;
try {
fr = new FileReader(file);
} catch (FileNotFoundException e) {
}
String path = null;
try {
if (fr != null) {
br = new BufferedReader(fr);
String s = br.readLine();
while (s != null) {
if (s.startsWith("dev_mount")) {
String[] tokens = s.split("\\s");
path = tokens[2]; // mount_point
if (Environment.getExternalStorageDirectory()
.getAbsolutePath().equals(path)) {
break;
}
}
s = br.readLine();
}
}
} catch (IOException e) {
} finally {
try {
if (fr != null) {
fr.close();
}
if (br != null) {
br.close();
}
} catch (IOException e) {
}
}
return path;
}
要获取外部SD卡安装目录,只需更改:
if (Environment.getExternalStorageDirectory()
.getAbsolutePath().equals(path)) {
break;
}
致:
if (!Environment.getExternalStorageDirectory()
.getAbsolutePath().equals(path)) {
break;
}
注意:此方法特定于reather设备,我可以使用它,因为我知道我只针对具有额外内部存储空间的三星设备进行开发。如果您希望这适用于所有设备,则必须进行其他更改。