android 对权限的简单的封装

简介: android 对权限的简单的封装

android 动态权限的简单封装。


在android 6.0 以后,如果你要进行一些敏感的操作,你就必须动态的申请权限。


在动态申请权限的时候必须先加入静态的权限,在清单文件中进行注册。


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


然后就可以进行动态权限的请求了。


因为权限必须在Activity 中进行申请,为了 单一原则,我将他封装在一个抽象的Activity中,然后让别的activity都继承他。


@SuppressWarnings("ALL")
public abstract class PermissionCheckPepsi extends BaseActivity {
    private  ICheckPermission mICheckPermission = null;
    interface ICheckPermission {
        void onAllow();
        void onReject();
    }
    public void checkPermission(String[] permission, ICheckPermission iCheckPermission) {
        if (Build.VERSION.SDK_INT < 23 || permission.length == 0) {
            if (iCheckPermission != null){
                iCheckPermission.onAllow();
            }
        }else {
            if (iCheckPermission != null){
                mICheckPermission = iCheckPermission;
                ActivityCompat.requestPermissions(this,permission,0);
            }
        }
    }
    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        if (mICheckPermission != null && requestCode == 0){
            for (int i = 0; i < grantResults.length; i++) {
                //判断权限是否被允许,只要又一次拒绝就算失败
                if (grantResults[i] == PackageManager.PERMISSION_DENIED){
                    // 1:用户拒绝了该权限,没有勾选"不再提醒",此方法将返回true。
                    // 2:用户拒绝了该权限,有勾选"不再提醒",此方法将返回 false。
                    // 3:如果用户同意了权限,此方法返回false
                    if (!ActivityCompat.shouldShowRequestPermissionRationale(this,permissions[i])){
                        Toast.makeText(this, "你已拒绝此权限,如果需要,可以在设置中打开此权限", Toast.LENGTH_SHORT).show();
                    }else {
                        mICheckPermission.onReject();
                    }
                    return;
                }
            }
            mICheckPermission.onAllow();
        }
    }
}


如上就是一个简单的封装,如果要使用,只需要继承这个类直接调用就好了。


image.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        checkPermission(new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, new ICheckPermission() {
            @Override
            public void onAllow() {
                Toast.makeText(MainActivity.this, "成功", Toast.LENGTH_SHORT).show();
            }
            @Override
            public void onReject() {
                Toast.makeText(MainActivity.this, "失败", Toast.LENGTH_SHORT).show();
            }
        });
    }
});


注意:要遵循单一原则。要保证一个类只干一件事,像申请权限,直接弄一个抽象类进行封装,让别的类继承自他,这种方式体验非常好。


相关文章
|
3月前
|
存储 安全 Android开发
"解锁Android权限迷宫:一场惊心动魄的动态权限请求之旅,让你的应用从平凡跃升至用户心尖的宠儿!"
【8月更文挑战第13天】随着Android系统的更新,权限管理变得至关重要。尤其从Android 6.0起,引入了动态权限请求,增强了用户隐私保护并要求开发者实现更精细的权限控制。本文采用问答形式,深入探讨动态权限请求机制与最佳实践,并提供示例代码。首先解释了动态权限的概念及其重要性;接着详述实现步骤:定义、检查、请求权限及处理结果;最后总结了六大最佳实践,包括适时请求、解释原因、提供替代方案、妥善处理拒绝情况、适应权限变更及兼容旧版系统,帮助开发者打造安全易用的应用。
73 0
|
6月前
|
Android开发
Android 分享机顶盒项目的封装类《GridView》(二)(转)
Android 分享机顶盒项目的封装类《GridView》(二)(转)
48 2
|
2月前
|
存储 API Android开发
"解锁Android权限迷宫:一场惊心动魄的动态权限请求之旅,让你的应用从平凡跃升至用户心尖的宠儿!"
随着Android系统的更新,权限管理成为应用开发的关键。尤其在Android 6.0(API 级别 23)后,动态权限请求机制的引入提升了用户隐私保护,要求开发者进行更精细的权限管理。
65 2
|
3月前
|
Android开发 iOS开发
Android项目架构设计问题之将隐式跳转的逻辑进行抽象和封装如何解决
Android项目架构设计问题之将隐式跳转的逻辑进行抽象和封装如何解决
41 0
|
3月前
|
编解码 API 开发工具
Android平台轻量级RTSP服务模块二次封装版调用说明
本文介绍了Android平台上轻量级RTSP服务模块的二次封装实践,旨在简化开发流程,让开发者能更专注于业务逻辑。通过`LibPublisherWrapper`类提供的API,可在应用中轻松初始化RTSP服务、配置视频参数(如分辨率、编码类型)、启动与停止RTSP服务及流发布,并获取RTSP会话数量。此外,还展示了如何处理音频和视频数据的采集与推送。最后,文章提供了从启动服务到销毁资源的完整示例,帮助开发者快速集成实时流媒体功能。
|
6月前
|
Java Shell Android开发
android 权限申请
android 权限申请
115 5
|
5月前
|
Android开发 Kotlin
kotlin安卓开发【Jetpack Compose】:封装SnackBarUtil工具类方便使用
GPT-4o 是一个非常智能的模型,比当前的通义千问最新版本在能力上有显著提升。作者让GPT开发一段代码,功能为在 Kotlin 中使用 Jetpack Compose 框架封装一个 Snackbar 工具类,方便调用
|
6月前
|
XML Java Android开发
Android 分享机顶盒项目的封装类《GridView》(三)(转)
Android 分享机顶盒项目的封装类《GridView》(三)(转)
37 2
|
6月前
|
达摩院 安全 Java
80 PM撸代码之Android【武侠讲封装、继承、多态】
80 PM撸代码之Android【武侠讲封装、继承、多态】
47 0
|
6月前
|
XML API 数据库
Android权限
Android权限 【5月更文挑战第3天】
101 0