我想打开外部存储目录路径以编程方式保存文件 . 我试过但没有获得SD卡路径 . 我怎么能这样做?有什么解决方案吗?
private File path = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES) + "");
要么
private File path = new File(Environment.getExternalStorageDirectory() + "");
我尝试从两个方法上面获取路径,但两者都指向内部存储器 .
当我们打开存储内存时,如果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" />
8 回答
我一直有同样的问题!
要获得内部SD卡,您可以使用
要获得外部SD卡,您可以使用
在运行代码时
完美运作!
内部存储在API中称为“外部存储” .
如Environment文档中所述
要区分“Environment.getExternalStorageDirectory()”是否实际返回物理内部或外部存储,请调用Environment.isExternalStorageEmulated() . 如果它是模仿的,那么它就是内部的 . 在具有内部存储和SD卡插槽的较新设备上,Environment.getExternalStorageDirectory()将始终返回内部存储 . 在仅使用SD卡作为媒体存储选项的旧设备上,它将始终返回SD卡 .
无法使用当前的Android API检索所有存储 .
我在下面的答案中创建了一个基于Vitaliy Polchuk方法的助手
How can I get the list of mounted external storage of android device
NOTE: starting KitKat secondary storage is accessible only as READ-ONLY ,您可能希望使用以下方法检查可写性
StorageHelper类
希望它对你有用:
这将给你sdcard路径:
试试这个:
或试试这个:
补充 rijul gupta 答案:
将@ rijul的答案向前推进,它在棉花糖及以上版本中无效:
要将应用程序文件存储在SD卡中, should 在
Context
类中使用File[] getExternalFilesDirs (String type)
方法 . 通常,第二个返回路径将是microSD卡的存储路径(如果有的话) .在我的手机上,在将
null
作为参数传递给getExternalFilesDirs (String type)
之后,返回的第二条路径为/storage/sdcard1/Android/data/your.application.package.appname/files
. 但路径可能因手机不同而不同,不同的Android版本 .Environment
类中的File getExternalStorageDirectory ()
和File getExternalStoragePublicDirectory (String type)
都可能返回SD卡目录或内部存储器目录,具体取决于您的手机型号和Android操作系统版本 .因为Official Android Guide外部存储可以
根据谷歌/官方Android文档的内部和外部存储术语是我们认为的 quite different .
是的,它可能在KITKAT中有效 .
在KITKAT之上它将进入内部存储:路径如(storage / emulated / 0) .
请想一想,“Xender app”如何允许写入外部SD卡 .
因此,幸运的是,在Android 5.0及更高版本中,有一种新的官方方式可以让应用程序写入外部SD卡 . 应用必须要求用户授予对SD卡上文件夹的写入权限 . 他们打开一个系统文件夹选择器对话框 . 用户需要导航到该特定文件夹并选择它 .
有关详细信息,请参阅https://metactrl.com/docs/sdcard-on-lollipop/
尝试使用
new File(Environment.getExternalStorageDirectory(),"somefilename");
并且不要忘记添加WRITE_EXTERNAL STORAGE和READ_EXTERNAL STORAGE权限