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 的新权限管理体系。如有更多问题,欢迎与我交流!