您的位置:首页 > 移动开发 > Android开发

获取手机和SD卡路径(Android 4.0以上验证过)

2014-04-03 17:31 309 查看
1. android 系统内部使用

StorageManager mStorageManager = (StorageManager)getApplicationContext().getSystemService("storage");

StorageVolume[] storageVolumes = mStorageManager.getVolumeList();

for (StorageVolume volume : storageVolumes) {

if(volume.isRemovable()){

//sdcard

volume.getPath();//外部SD卡存储路径

}else if(volume.isEmulated()){

//phone

volume.getPath();//手机内部存储路径

}

}

2. 第三方使用(使用反射方式)

private void testStorage(){

StorageManager storageManager = (StorageManager)getApplicationContext().getSystemService("storage");

try {

Class<?>[] paramClasses = {};

Method getVolumeList = StorageManager.class.getMethod("getVolumeList", paramClasses);

getVolumeList.setAccessible(true);

Object[] params = {};

Object[] invokes = (Object[]) getVolumeList.invoke(storageManager, params);

if (invokes != null) {

for (int i = 0; i < invokes.length; i++) {

Object obj = invokes[i];

Method getPath = obj.getClass().getMethod("getPathFile", new Class[0]);

File file = (File)getPath.invoke(obj, new Object[0]);

if ((file.exists()) && (file.isDirectory())) {

Method isRemovable = obj.getClass().getMethod("isRemovable", new Class[0]);

Boolean is_removable = (Boolean)isRemovable.invoke(obj, new Object[0]);

Method getState = obj.getClass().getMethod("getState", new Class[0]);

String storageState = (String)getState.invoke(obj, new Object[0]);

Log.i("","path:"+file.getAbsolutePath()+",State:"+storageState+",isRemovable:"+is_removable);

if(storageState.equals("mounted") || storageState.equals("removed")){

if(is_removable){

Log.i("","外部SD卡存储路径 "+file.getAbsolutePath());

}else{

Log.i("","手机内部存储路径 "+file.getAbsolutePath());

}

}

}

}

}

} catch (NoSuchMethodException e1) {

e1.printStackTrace();

} catch (IllegalArgumentException e) {

e.printStackTrace();

} catch (IllegalAccessException e) {

e.printStackTrace();

} catch (InvocationTargetException e) {

e.printStackTrace();

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: