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

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

1、权限需求

android 访问外部存储设备

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等。

3、示例代码

写入文件到外部存储

android 访问外部存储设备

“`java

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

try {

FileOutputStream fos = new FileOutputStream(file);

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

fos.close();

} catch (IOException e) {

e.printStackTrace();

}

android 访问外部存储设备

读取外部存储中的文件
     ```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、相关问题与解答

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

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

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

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

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

原创文章,作者:未希,如若转载,请注明出处:https://www.kdun.com/ask/1619833.html

本网站发布或转载的文章及图片均来自网络,其原创性以及文中表达的观点和判断不代表本网站。如有问题,请联系客服处理。

(0)
未希
上一篇 2025-03-07 17:13
下一篇 2025-03-07 17:15

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

产品购买 QQ咨询 微信咨询 SEO优化
分享本页
返回顶部
云产品限时秒杀。精选云产品高防服务器,20M大带宽限量抢购 >>点击进入