如何获得用于Android4.0+的外部SD卡路径?

如何获得用于Android4.0+的外部SD卡路径?

三星Galaxy S3有一个额外的SD卡插槽,安装在/mnt/extSdCard.

我的问题是:如何通过这样的方法获得这条道路Environment.getExternalStorageDirectory()?这个会回来的mnt/sdcard,我找不到外部SD卡的API。(或一些平板电脑上的可移动USB存储器)

谢谢!


aluckdog
浏览 450回答 3
3回答

慕工程0101907

我找到了更可靠的方法来获得系统中所有SD卡的路径。这适用于所有Android版本,并返回到所有存储(包括模拟)路径。在我所有的设备上都能正常工作。P.S.:基于环境类的源代码。private&nbsp;static&nbsp;final&nbsp;Pattern&nbsp;DIR_SEPORATOR&nbsp;=&nbsp;Pattern.compile("/");/** &nbsp;*&nbsp;Raturns&nbsp;all&nbsp;available&nbsp;SD-Cards&nbsp;in&nbsp;the&nbsp;system&nbsp;(include&nbsp;emulated) &nbsp;* &nbsp;*&nbsp;Warning:&nbsp;Hack!&nbsp;Based&nbsp;on&nbsp;Android&nbsp;source&nbsp;code&nbsp;of&nbsp;version&nbsp;4.3&nbsp;(API&nbsp;18) &nbsp;*&nbsp;Because&nbsp;there&nbsp;is&nbsp;no&nbsp;standart&nbsp;way&nbsp;to&nbsp;get&nbsp;it. &nbsp;*&nbsp;TODO:&nbsp;Test&nbsp;on&nbsp;future&nbsp;Android&nbsp;versions&nbsp;4.4+ &nbsp;* &nbsp;*&nbsp;@return&nbsp;paths&nbsp;to&nbsp;all&nbsp;available&nbsp;SD-Cards&nbsp;in&nbsp;the&nbsp;system&nbsp;(include&nbsp;emulated) &nbsp;*/public&nbsp;static&nbsp;String[]&nbsp;getStorageDirectories(){ &nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;Final&nbsp;set&nbsp;of&nbsp;paths &nbsp;&nbsp;&nbsp;&nbsp;final&nbsp;Set<String>&nbsp;rv&nbsp;=&nbsp;new&nbsp;HashSet<String>(); &nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;Primary&nbsp;physical&nbsp;SD-CARD&nbsp;(not&nbsp;emulated) &nbsp;&nbsp;&nbsp;&nbsp;final&nbsp;String&nbsp;rawExternalStorage&nbsp;=&nbsp;System.getenv("EXTERNAL_STORAGE"); &nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;All&nbsp;Secondary&nbsp;SD-CARDs&nbsp;(all&nbsp;exclude&nbsp;primary)&nbsp;separated&nbsp;by&nbsp;":" &nbsp;&nbsp;&nbsp;&nbsp;final&nbsp;String&nbsp;rawSecondaryStoragesStr&nbsp;=&nbsp;System.getenv("SECONDARY_STORAGE"); &nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;Primary&nbsp;emulated&nbsp;SD-CARD &nbsp;&nbsp;&nbsp;&nbsp;final&nbsp;String&nbsp;rawEmulatedStorageTarget&nbsp;=&nbsp;System.getenv("EMULATED_STORAGE_TARGET"); &nbsp;&nbsp;&nbsp;&nbsp;if(TextUtils.isEmpty(rawEmulatedStorageTarget)) &nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;Device&nbsp;has&nbsp;physical&nbsp;external&nbsp;storage;&nbsp;use&nbsp;plain&nbsp;paths. &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(TextUtils.isEmpty(rawExternalStorage)) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;EXTERNAL_STORAGE&nbsp;undefined;&nbsp;falling&nbsp;back&nbsp;to&nbsp;default. &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rv.add("/storage/sdcard0"); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rv.add(rawExternalStorage); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;else &nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;Device&nbsp;has&nbsp;emulated&nbsp;storage;&nbsp;external&nbsp;storage&nbsp;paths&nbsp;should&nbsp;have &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;userId&nbsp;burned&nbsp;into&nbsp;them. &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;final&nbsp;String&nbsp;rawUserId; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(Build.VERSION.SDK_INT&nbsp;<&nbsp;Build.VERSION_CODES.JELLY_BEAN_MR1) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rawUserId&nbsp;=&nbsp;""; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;final&nbsp;String&nbsp;path&nbsp;=&nbsp;Environment.getExternalStorageDirectory().getAbsolutePath(); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;final&nbsp;String[]&nbsp;folders&nbsp;=&nbsp;DIR_SEPORATOR.split(path); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;final&nbsp;String&nbsp;lastFolder&nbsp;=&nbsp;folders[folders.length&nbsp;-&nbsp;1]; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;boolean&nbsp;isDigit&nbsp;=&nbsp;false; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;try &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Integer.valueOf(lastFolder); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;isDigit&nbsp;=&nbsp;true; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;catch(NumberFormatException&nbsp;ignored) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rawUserId&nbsp;=&nbsp;isDigit&nbsp;?&nbsp;lastFolder&nbsp;:&nbsp;""; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;/storage/emulated/0[1,2,...] &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(TextUtils.isEmpty(rawUserId)) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rv.add(rawEmulatedStorageTarget); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rv.add(rawEmulatedStorageTarget&nbsp;+&nbsp;File.separator&nbsp;+&nbsp;rawUserId); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;Add&nbsp;all&nbsp;secondary&nbsp;storages &nbsp;&nbsp;&nbsp;&nbsp;if(!TextUtils.isEmpty(rawSecondaryStoragesStr)) &nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;All&nbsp;Secondary&nbsp;SD-CARDs&nbsp;splited&nbsp;into&nbsp;array &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;final&nbsp;String[]&nbsp;rawSecondaryStorages&nbsp;=&nbsp;rawSecondaryStoragesStr.split(File.pathSeparator); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Collections.addAll(rv,&nbsp;rawSecondaryStorages); &nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;rv.toArray(new&nbsp;String[rv.size()]);}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Android