Android 12 安装 APP 默认给权限的实现

在 Android 开发过程中,尤其在 Android 12 及更高版本中,处理权限问题显得尤为重要。随着 Android 系统的演变,Google 对用户隐私的重视程度不断增加,因此在权限的管理上也推行了更严格的政策。本文将带你了解如何在 Android 12 中实现应用安装时默认给予某些权限。

流程概览

以下是实现 Android 12 安装应用时默认给予权限的主要步骤:

步骤 操作内容
1 创建项目并配置 Gradle 文件
2 设置 Manifest 文件中的所需权限
3 添加 RuntimePermissionUtils 工具类
4 在 MainActivity 中请求权限
5 测试应用并确认权限已生效

详细步骤

步骤 1: 创建项目并配置 Gradle 文件

首先,创建一个新的 Android 项目,在 build.gradle 文件中添加所需的依赖项。但在 Android 12 中,如果你希望默认给予某些权限,你需要将 targetSdkVersion 设置为 31 或更高。

android {
    compileSdkVersion 31
    defaultConfig {
        applicationId "com.example.permissiondemo"
        minSdkVersion 21
        targetSdkVersion 31 // 设置为 31 或更高
        versionCode 1
        versionName "1.0"
    }
}

步骤 2: 设置 Manifest 文件中的所需权限

AndroidManifest.xml 中声明你需要的权限。例如,如果你的应用需要访问相机和读写存储权限,你可以这样写:

<manifest xmlns:android="
    package="com.example.permissiondemo">

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

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/Theme.AppCompat.Light.NoActionBar">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>
</manifest>

步骤 3: 添加 RuntimePermissionUtils 工具类

创建一个 RuntimePermissionUtils 类来处理所需的权限请求。这个类将帮助你检查权限并请求用户授权。

public class RuntimePermissionUtils {

    // 检查指定权限是否被授予
    public static boolean isPermissionGranted(Context context, String permission) {
        return ContextCompat.checkSelfPermission(context, permission) == PackageManager.PERMISSION_GRANTED;
    }

    // 请求指定权限
    public static void requestPermission(Activity activity, String permission, int requestCode) {
        ActivityCompat.requestPermissions(activity, new String[]{permission}, requestCode);
    }
}

步骤 4: 在 MainActivity 中请求权限

MainActivity 中使用你刚刚创建的工具类来请求权限。在 onCreate 方法中检查权限,如果没有权限则请求。

public class MainActivity extends AppCompatActivity {

    private static final int REQUEST_CODE_CAMERA = 1;
    private static final int REQUEST_CODE_STORAGE = 2;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        // 检查相机权限
        if (!RuntimePermissionUtils.isPermissionGranted(this, Manifest.permission.CAMERA)) {
            RuntimePermissionUtils.requestPermission(this, Manifest.permission.CAMERA, REQUEST_CODE_CAMERA);
        }

        // 检查存储权限
        if (!RuntimePermissionUtils.isPermissionGranted(this, Manifest.permission.WRITE_EXTERNAL_STORAGE)) {
            RuntimePermissionUtils.requestPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE, REQUEST_CODE_STORAGE);
        }
    }
    
    // 处理请求权限的结果
    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        if (requestCode == REQUEST_CODE_CAMERA) {
            // 相机权限请求的结果
            if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                // 权限被授予
            } else {
                // 权限被拒绝
            }
        } else if (requestCode == REQUEST_CODE_STORAGE) {
            // 存储权限请求的结果
            if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                // 权限被授予
            } else {
                // 权限被拒绝
            }
        }
    }
}

步骤 5: 测试应用并确认权限已生效

部署应用到 Android 12 设备上,检查你请求的权限是否被自动授予或显示权限请求对话框。如果用户选择授予权限,则可以正常使用相关功能。

类图

classDiagram
    class RuntimePermissionUtils {
        +isPermissionGranted(Context context, String permission) bool
        +requestPermission(Activity activity, String permission, int requestCode)
    }
    class MainActivity {
        +onCreate(Bundle savedInstanceState)
        +onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults)
    }

流程图

journey
    title 权限请求过程
    section 程序启动
      用户启动应用: 5: 用户
      检查权限: 5: 系统
    section 权限处理
      权限未授予: 5: 系统
      请求权限: 5: 应用
      等待用户反馈: 5: 用户
      权限被授予: 5: 系统
      权限被拒绝: 5: 系统

结论

通过上述步骤,我们成功地实现了在 Android 12 中请求应用所需权限的功能。由于 Android 12 对权限管理的严格性,理解并正确实现权限请求是非常重要的。希望这篇文章能帮助到所有刚入行的开发者,顺利过渡到 Android 的新权限管理体系。如有更多问题,欢迎与我交流!