我试图在运行4.2.2的Samsung Galaxy Nexus上将文件保存到我的SD卡上。 从我的应用程序,我正在使用 Environment.getExternalStorageDirectory() 但它返回 /storage/emulated/0/ 这不是我的SDcard信息所在的位置。 有什么工作方法可以用来获得我的SD卡的正确path吗?
背景 关于如何处理SD卡和存储,Android有了很多变化: API 3 – 您获得所有访问权限,不需要任何权限 API 4-15 – 您需要使用WRITE_EXTERNAL_STORAGE,并获得所有权限。 API 16-18 – 如果您只想阅读,请使用READ_EXTERNAL_STORAGE API 19-20 – 除非您的应用程序是系统应用程序,否则您无法读取或写入辅助外部存储(SD卡),或者您拥有root用户。 API 21-22 – 为了访问SD卡,您需要向用户请求权限,并使用DocumentFile API而不是File API。 这引发了很多问题,正如我在这里和这里写的 。 从API 23开始(Android 6),事情似乎又改变了… 问题 对于API 23,至less有两件新事物是与存储相关的: “ 可采用的存储设备 ” – 用户可以select将SD卡作为主外部存储设备。 作为新的权限机制 (在运行时请求权限)的一部分,似乎存储也是用户需要确认的权限。 这适用于READ_EXTERNAL_STORAGE和WRITE_EXTERNAL_STORAGE 由于没有安装SD卡的Android 6设备,而且由于模拟器本身并不具备使用SD卡的能力,所以仍然不可能知道发生了什么。 问题 SD卡是否使用File-API而不是DocumentFile访问? 如果我想要访问所有的外部存储path(包括SD卡),这是否意味着我需要两次请求这个权限:一个用于主外部存储,一个用于SD卡? 在手动授予权限之前,SD卡上的文件是否可以以任何方式访问? 假设用户select使用“可采用的存储设备”,这对于检索应用文件path的各种function意味着什么? 例如:getFilesDir,getExternalFilesDir,…? getExternalFilesDirs的oder会因为它而改变吗? 当用户将应用程序从SD卡上移动到SD卡时(使用“可采用的存储设备”),应用程序的文件会发生什么变化? 关于SD卡上的应用程序文件呢? 他们会留下吗? 或者他们会搬到什么地方? 例如,如果应用程序在SD卡上具有“file1.txt”,则path为“/ storage […]
我想要打开外部存储目录path来保存文件programatically.I尝试,但没有得到SD卡path。 我怎么能做到这一点?有没有解决scheme? private File path = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES) + ""); 要么 private File path = new File(Environment.getExternalStorageDirectory() + ""); 我试图从两种方法获得path,但都指向内部记忆。 当我们打开存储内存,如果SD卡是peresent它将显示如下 – 设备存储和SD存储卡。 我想通过编码获得sd内存path。 我已经在manifest中授予权限, <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" />
我的应用程序允许用户将图像保存到他们的SD卡。 但是我不知道如何才能使它出现在画廊,直到你卸载并重新安装SD卡。 我已经search了几天这个问题,但不知道如何使其自动出现。 我发现这个链接,但我不知道如何使用这个类。 这是我用来保存文件。 在try catch块的底部是我想扫描SD卡的新媒体。 FileOutputStream outStream = null; File file = new File(dirPath, fileName); try { outStream = new FileOutputStream(file); bm.compress(Bitmap.CompressFormat.JPEG, 100, outStream); outStream.flush(); outStream.close(); } catch { … } 如果有人能指出我正确的方向,我将不胜感激。
我的应用程序正在为只有SD卡的手机工作。 所以编程方式,我想检查SD卡是否可用,以及如何findSD卡的可用空间。 可能吗? 如果是,我该怎么做?
我如何使用Environment.getExternalStorageDirectory()从SD卡读取存储的图像还是有更好的方法来做到这一点?