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();
            }
        });
    }
});


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


相关文章
|
21天前
|
Java Android开发
Android 开发获取通知栏权限时会出现两个应用图标
Android 开发获取通知栏权限时会出现两个应用图标
12 0
|
3月前
|
Android开发 Python
Python封装ADB获取Android设备wifi地址的方法
Python封装ADB获取Android设备wifi地址的方法
61 0
|
6月前
|
Android开发
Android Http 请求封装及使用
Android Http 请求封装及使用
126 0
|
5天前
|
安全 Android开发 数据安全/隐私保护
Android中的动态权限请求与最佳实践
【4月更文挑战第14天】 在现代安卓应用开发中,用户隐私和安全被赋予了前所未有的重要性。随着Android 6.0(API级别23)引入的运行时权限模型,开发者必须更加细致地处理权限请求,以确保应用功能的完整性同时不侵犯用户的隐私。本文将深入探讨如何在Android应用中实现动态权限请求,分析常见问题,并提供一系列最佳实践,以帮助开发者优雅地处理这一挑战。
16 5
|
2月前
|
安全 Java 数据挖掘
当 App 有了系统权限,真的可以为所欲为? Android Performance Systrace
当 App 有了系统权限,真的可以为所欲为? Android Performance Systrace 转载自: https://androidperformance.com/2023/05/14/bad-android-app-with-system-permissions/#/0-Dex-%E6%96%87%E4%BB%B6%E4%BF%A1%E6%81%AF
31 0
|
4月前
|
安全 Android开发 Kotlin
android开发,使用kotlin学习Android权限机制
android开发,使用kotlin学习Android权限机制
35 0
|
7月前
|
Android开发
Android应用开发权限
Android应用开发权限
44 1
|
8月前
|
Java API Android开发
Android 权限机制详解
Android 权限机制详解
72 0
|
8月前
|
存储 安全 API
Android系统权限使用详解
Android系统权限使用详解
|
8月前
|
API Android开发 Kotlin
安卓MVI架构真的来了?动手试着封装吧(三)下
安卓MVI架构真的来了?动手试着封装吧(三)
81 0