Android13 WRITE_EXTERNAL_STORAGE 适配指南

引言

在Android 10及以上的版本中,WRITE_EXTERNAL_STORAGE权限发生了变化,需要进行适配才能正常访问外部存储。本文将介绍如何适配Android 13及以上版本的WRITE_EXTERNAL_STORAGE权限。

适配流程

以下是适配WRITE_EXTERNAL_STORAGE权限的整体流程:

步骤 描述
步骤一 检查当前运行的Android版本是否为Android 13及以上版本
步骤二 请求WRITE_EXTERNAL_STORAGE权限
步骤三 处理权限请求结果
步骤四 更新Manifest文件

下面我们将详细解释每个步骤需要做什么。

步骤一:检查Android版本

在代码中,我们需要判断当前运行的Android版本是否为Android 13及以上版本。可以使用以下代码进行判断:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
    // 运行在Android 13及以上版本
} else {
    // 运行在Android 13以下版本
}

步骤二:请求权限

在Android 13及以上版本中,WRITE_EXTERNAL_STORAGE权限被分为两部分:MediaStore和SAF。

请求MediaStore权限

MediaStore权限用于访问媒体文件,可以使用以下代码请求该权限:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
    if (ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
        ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, REQUEST_MEDIASTORE_PERMISSION);
    }
}

请求SAF权限

SAF权限用于访问非媒体文件,可以使用以下代码请求该权限:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
    if (Environment.isExternalStorageManager()) {
        // 已经获取了SAF权限
    } else {
        Intent intent = new Intent(Settings.ACTION_MANAGE_APP_ALL_FILES_ACCESS_PERMISSION);
        Uri uri = Uri.fromParts("package", getPackageName(), null);
        intent.setData(uri);
        startActivity(intent);
    }
}

步骤三:处理权限请求结果

当用户授权或拒绝权限请求后,需要处理权限请求结果。可以使用以下代码处理权限请求结果:

@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
    super.onRequestPermissionsResult(requestCode, permissions, grantResults);
    if (requestCode == REQUEST_MEDIASTORE_PERMISSION) {
        if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
            // 用户授权了权限
        } else {
            // 用户拒绝了权限
        }
    }
}

步骤四:更新Manifest文件

在AndroidManifest.xml文件中,需要添加以下权限声明:

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

总结

通过以上步骤,我们可以实现对Android 13及以上版本的WRITE_EXTERNAL_STORAGE权限进行适配。首先,我们需要检查当前运行的Android版本是否为Android 13及以上版本。然后,根据权限类型分别请求MediaStore和SAF权限。最后,处理权限请求结果并更新Manifest文件。这样就能够在Android 13及以上版本中正常访问外部存储了。

![适配流程图]( "步骤一": 20, "步骤二": 35, "步骤三": 25, "步骤四": 20 )

希望本文能够帮助到你,顺利完成Android 13 WRITE_EXTERNAL_STORAGE权限的适配。如有任何疑问,请随时留言。