封装了 Android 权限检查和申请功能 PermissionManager工具类,支持权限检查、申请、说明对话框显示和设置页面引导等功能。
封装了 Android 权限检查和申请功能,创建了一个独立的PermissionManager工具类。这个工具类可以轻松集成到任何 Android 应用中,支持权限检查、申请、说明对话框显示和设置页面引导等功能。
主要特点:
- 简化的权限请求流程
- 自动处理权限拒绝和永久拒绝场景
- 提供友好的用户提示
- 支持自定义权限说明
- 可单独使用,不依赖其他组件
使用方法非常简单,只需创建实例、设置监听器、定义权限和调用检查方法即可。项目中还包含了完整的视频录制功能作为示例,展示了如何使用这个权限管理工具类。
PermissionManager是一个独立的权限管理工具类,提供以下功能:
- 检查权限状态
- 请求权限
- 显示权限说明对话框
- 引导用户到设置页面
- 处理权限请求结果
- 支持多种权限场景
集成步骤
1. 添加权限
在AndroidManifest.xml中添加所需权限:
<!-- 视频录制所需权限 -->
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
2. 添加活动(如果使用视频录制功能)
在AndroidManifest.xml中注册活动:
<!-- 主活动 -->
<activityandroid:name=".MainActivity"android:exported="true"><intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" /></intent-filter>
</activity><!-- 视频录制活动 -->
<activityandroid:name=".VideoRecordActivity"android:exported="true"android:screenOrientation="portrait" />
3. 复制文件
仅使用权限管理功能:
- PermissionManager.java
代码如下:
1.权限管理器使用示例
package com.bg.videorecorder;import android.Manifest;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;import java.util.List;/*** 权限管理器使用示例*/
public class PermissionUsageExample extends AppCompatActivity {private PermissionManager mPermissionManager;// 示例:不同功能需要的权限private String[] cameraPermissions = {Manifest.permission.CAMERA};private String[] storagePermissions = {Manifest.permission.READ_EXTERNAL_STORAGE,Manifest.permission.WRITE_EXTERNAL_STORAGE};private String[] locationPermissions = {Manifest.permission.ACCESS_FINE_LOCATION};private String[] microphonePermissions = {Manifest.permission.RECORD_AUDIO};@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_permission_example);// 初始化权限管理器mPermissionManager = new PermissionManager(this);// 设置权限结果监听器mPermissionManager.setOnPermissionResultListener(new PermissionManager.OnPermissionResultListener() {@Overridepublic void onAllPermissionsGranted() {// 所有权限已授予,可以执行需要权限的操作Toast.makeText(PermissionUsageExample.this, "所有权限已授予", Toast.LENGTH_SHORT).show();}@Overridepublic void onPermissionsDenied(List<String> deniedPermissions) {// 权限被拒绝StringBuilder message = new StringBuilder("以下权限被拒绝:");for (String permission : deniedPermissions) {message.append("\n- ").append(PermissionManager.getPermissionName(permission));}Toast.makeText(PermissionUsageExample.this, message.toString(), Toast.LENGTH_SHORT).show();}@Overridepublic void onPermissionsPermanentlyDenied(List<String> permanentlyDeniedPermissions) {// 权限被永久拒绝StringBuilder message = new StringBuilder("以下权限已被永久拒绝,请在设置中手动开启:");for (String permission : permanentlyDeniedPermissions) {message.append("\n- ").append(PermissionManager.getPermissionName(permission));}Toast.makeText(PermissionUsageExample.this, message.toString(), Toast.LENGTH_SHORT).show();}});// 相机权限按钮Button cameraButton = findViewById(R.id.btn_camera_permission);cameraButton.setOnClickListener(v -> requestCameraPermission());// 存储权限按钮Button storageButton = findViewById(R.id.btn_storage_permission);storageButton.setOnClickListener(v -> requestStoragePermission());// 位置权限按钮Button locationButton = findV