当前位置:首页 > 行业动态 > 正文

Android如何访问外部存储设备?

Android访问外部存储设备,需在 AndroidManifest.xml中声明权限,如` ,并在运行时动态请求该权限。然后通过相关API,如Environment.getExternalStorageDirectory()`获取外部存储路径,再进行文件操作。

1、权限需求

Android 6.0(API 级别 23)及更高版本:需要动态请求权限,在安装应用时,系统不会授予应用访问外部存储的权限,而是在应用运行时,根据实际需要动态申请,如果应用需要读取外部存储中的文件,需要在代码中通过ContextCompat.checkSelfPermission()方法检查是否已经获得READ_EXTERNAL_STORAGE权限,如果没有获得,则使用ActivityCompat.requestPermissions()方法向用户请求该权限。

Android 6.0以下版本:通常在AndroidManifest.xml文件中声明权限即可,如<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/><uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>

2、访问方式

使用内置存储API

获取外部存储的根目录:可以使用Environment.getExternalStorageDirectory()方法获取外部存储的根目录,然后基于此目录进行文件的读写操作。

获取特定类型的公共目录:要获取图片存储的公共目录,可以使用Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES)

使用文档提供程序模式(适用于Android 10及更高版本):从Android 10开始,谷歌推荐使用文档提供程序模式来访问外部存储,应用可以通过Intent启动文档选择器,让用户选择要操作的文件或文件夹,然后通过ContentResolver来操作这些文件,这种方式不需要申请传统的存储权限,但需要处理一些额外的逻辑,如处理用户选择的文件Uri等。

Android如何访问外部存储设备?

3、示例代码

写入文件到外部存储

“`java

File file = new File(getExternalFilesDir(null), "example.txt");

try {

FileOutputStream fos = new FileOutputStream(file);

Android如何访问外部存储设备?

fos.write("Hello, world!".getBytes());

fos.close();

} catch (IOException e) {

e.printStackTrace();

}

读取外部存储中的文件
     ```java
       File file = new File(getExternalFilesDir(null), "example.txt");
       try {
           FileInputStream fis = new FileInputStream(file);
           int size = fis.available();
           byte[] buffer = new byte[size];
           fis.read(buffer);
           String text = new String(buffer);
           fis.close();
           System.out.println(text);
       } catch (IOException e) {
           e.printStackTrace();
       }

4、相关问题与解答

Android如何访问外部存储设备?

问题1:为什么在Android 10及以上版本中,不建议使用传统的存储权限来访问外部存储?

解答:在Android 10及以上版本中,谷歌对外部存储的访问进行了更严格的限制,以保护用户的隐私和数据安全,传统的存储权限可能会导致应用过度获取用户的数据,而文档提供程序模式可以让用户更精细地控制应用对文件的访问,提高安全性。

问题2:如何在Android中判断外部存储是否可用?

解答:可以使用Environment.getExternalStorageState()方法来判断外部存储的状态,如果返回Environment.MEDIA_MOUNTED,则表示外部存储已挂载且可用;如果返回Environment.MEDIA_MOUNTED_READ_ONLY,则表示外部存储已挂载但只读;如果返回其他值,则表示外部存储不可用。

Android访问外部存储设备涉及权限申请、多种访问方式及具体代码实现,同时需注意不同版本的权限变化和最佳实践,以确保应用能够安全、有效地访问外部存储。