Android得到的真机的SD卡路径是 /storage/emulated/0/!!!!!!!!!!

如题,一个小时前测试得到还是正确路径,现在得到的却是/storage/emulated/0/,NEXUS4和GALAXY S2都得不到正确的,有一台中兴能得到正确的。权限什么的都加好了。
之前还可以的,怎么突然就犯病了呢?

已经解决了,得到的/storage/emulated/0/是引用路径,其实也是可以用的。

我得到SD卡的路径用的是这个:Environment.getExternalStorageDirectory(),你试试

用Environment.getExternalStorageDirectory().getAbsolutePath()获取试下

极有可能还是代码问题,仔细调试下看看。

这个应该是不同的机型可能一些厂家进行了自己的设置,只要照常使用应该没问题

Environment.getExternalStorageDirectory().getAbsolutePath()得到的是引用路径,有引用就OK了

不同手机对sd卡的路径设置不一样的!
不同手机对sd卡的路径设置不一样的!

sd卡也有路径为/storage/emulated/1的

手机sd卡默认路径/storage/emulated/是没错的, 很有可能是你代码的问题,把你的代码粘过来看看就知道啦。

手机sd卡默认路径/storage/emulated/是没错的, 很有可能是你代码的问题,把你的代码粘过来看看就知道啦。

android是基于linux的,linux里的要使用存储设备就要先把它挂载到到linux的目录树上(以/为根),android上一般是挂载到/storage/emulated/这个目录对应的目录或者/storage对应目录里的,假如你可以放两张内存卡,那些就可能是分别挂载到 /storage/emulated/0/  和/storage/emulated/1/ 这样的目录。。而你得到/storage/emulated/0/是你SD卡的真正目录。。不是引用路径。以前你可能会得到的是/sdcard 这样的路径。那个才是一个链接(你所说的引用),链接到你SD直正的挂载目录/storage/emulated/0 。。所以当你访问两个路径时得到的内容是一样的。

用Environment.getExternalStorageDirectory().getAbsolutePath()获取试下

我得到SD卡的路径用的是这个:Environment.getExternalStorageDirectory(),你试试
手机SD卡的问题可能是代码的问题,你查查看就好了

public String getSDPath(){
File sdDir = null;
boolean sdCardExist = Environment.getExternalStorageState()

.equals(Android.os.Environment.MEDIA_MOUNTED); //判断sd卡是否存在
if (sdCardExist)

{

sdDir = Environment.getExternalStorageDirectory();//获取跟目录
}

return sdDir.toString();

}

我和他们用的一样的没有什么问题

恩,应该是不同机型的原因,有的机器会算机身内存和sd卡,有的就只算SD卡!

小米的就是这样的。 只要是通过代码获得的都不会错

如题,一个小时前测试得到还是正确路径,现在得到的却是/storage/emulated/0/,NEXUS4和GALAXY S2都得不到正确的,有一台中兴能得到正确的。权限什么的都加好了。

对啊!这个路径就可以用的!

android是基于linux的,linux里的要使用存储设备就要先把它挂载到到linux的目录树上(以/为根),android上一般是挂载到/storage/emulated/这个目录对应的目录或者/storage对应目录里的,假如你可以放两张内存卡,那些就可能是分别挂载到 /storage/emulated/0/  和/storage/emulated/1/ 这样的目录。。而你得到/storage/emulated/0/是你SD卡的真正目录。。不是引用路径。以前你可能会得到的是/sdcard 这样的路径。那个才是一个链接(你所说的引用),链接到你SD直正的挂载目录/storage/emulated/0 。。所以当你访问两个路径时得到的内容是一样的。

/storage/emulated/0/

你要得到手机外置sd卡的路径:最好用反射的方法:
public List getSDPaths(){//得到全部存储地址(SD卡,手机内存)
List paths = new ArrayList();
StorageManager storageManager = (StorageManager) getSystemService(Context.STORAGE_SERVICE);
try {
Class<?>[] paramClasses = {};
Method getVolumePathsMethod = StorageManager.class.getMethod("getVolumePaths", paramClasses);
getVolumePathsMethod.setAccessible(true);
Object[] params = {};
Object invoke = getVolumePathsMethod.invoke(storageManager, params);
for (int i = 0; i < ((String[])invoke).length; i++) {
paths.add(((String[])invoke)[i]);
Log.i("tag1", "路径:"+((String[])invoke)[i]);
}
} catch (NoSuchMethodException e1) {
e1.printStackTrace();
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
return paths;
}
若集合的大小为2,则有外置的sd卡,
若是自身储存的路径是:list.get(0),外置的sd卡的路径是list.get(1);
你要得到手机外置sd卡的路径:最好用反射的方法:
public List getSDPaths(){//得到全部存储地址(SD卡,手机内存)
List paths = new ArrayList();
StorageManager storageManager = (StorageManager) getSystemService(Context.STORAGE_SERVICE);
try {
Class<?>[] paramClasses = {};
Method getVolumePathsMethod = StorageManager.class.getMethod("getVolumePaths", paramClasses);
getVolumePathsMethod.setAccessible(true);
Object[] params = {};
Object invoke = getVolumePathsMethod.invoke(storageManager, params);
for (int i = 0; i < ((String[])invoke).length; i++) {
paths.add(((String[])invoke)[i]);
Log.i("tag1", "路径:"+((String[])invoke)[i]);
}
} catch (NoSuchMethodException e1) {
e1.printStackTrace();
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
return paths;
}
若集合的大小为2,则有外置的sd卡,
若是自身储存的路径是:list.get(0),外置的sd卡的路径是list.get(1);