背景 关于如何处理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 […]
我试图访问用户设备上的媒体文件(音乐)来播放它们; 一个简单的“你好世界” – 音乐播放器的应用程序。 我跟着一些教程,他们基本上给出了相同的代码。 但它不会工作; 它不断崩溃,并告诉我: error….. Caused by: java.lang.SecurityException: Permission Denial: reading com.android.providers.media.MediaProvider uri content://media/external/audio/media from pid=27696, uid=10059 requires android.permission.READ_EXTERNAL_STORAGE, or grantUriPermission() …. 现在,这是我的清单文件: <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="slimsimapps.troff" > <uses-permission android:name="android.permission.MEDIA_CONTENT_CONTROL"/> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> <application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <activity android:name=".MainActivity" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" […]
我想要打开外部存储目录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" />