Android 权限管理(Kotlin)

来源:互联网 发布:售后服务网络体系 编辑:程序博客网 时间:2024/05/19 15:24

权限的适配也算是一个比较让开发者脑袋大的问题了,一些国产品牌的手机申请成功了其实没有权限等各种蛋疼的问题。

前段日子看了个好心人大神git上一个开源,挺好的,先贴出它的地址:

https://github.com/jokermonn/permissions4m


首先感谢大神的分享。

下面我用Kotlin写了个简单的Demo。


添加依赖:

project中的build.gradle:

allprojects {  repositories {    maven { url 'https://jitpack.io' }  }}

app 中的 build.gradle:

dependencies {  compile 'com.github.jokermonn:permissions4m:2.1.2-lib'  annotationProcessor 'com.github.jokermonn:permissions4m:2.1.2-processor'}


AndroidManifest中声明:

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


activity中加了个拍照的按钮,点击事件中申请:

    override fun onClick(v: View?) {        when(v?.id){            // 拍照            R.id.btn_show_tv ->{                requestOnePermission()            }                    }    }


在申请之前要在activity申请回调中添加:

    override fun onRequestPermissionsResult(requestCode: Int, permissions: Array<out String>, grantResults: IntArray) {        Permissions4M.onRequestPermissionsResult(this, requestCode, grantResults)        super.onRequestPermissionsResult(requestCode, permissions, grantResults)    }

下面就看看具体申请的方法,大神的链接里都是Java代码。注释也很清楚,我就贴一下Kotlin的吧:

    /**     * 单个权限申请     */    fun requestOnePermission(){        Permissions4M.get(this)                // 是否强制弹出权限申请对话框,建议为 true,默认为 true                .requestForce(false)                // 是否支持5.0权限申请 默认false                .requestUnderM(false)                // 权限                .requestPermissions(Manifest.permission.CAMERA)                // 权限申请码                .requestCodes(1)                // 权限请求结果                .requestListener(object : ListenerWrapper.PermissionRequestListener{                    override fun permissionGranted(code: Int) {                        when(code){                            1 -> Toast.makeText(this@HomeActivity, "相机权限授权成功", Toast.LENGTH_SHORT).show()                        }                    }                    override fun permissionDenied(code: Int) {                        when(code){                            1 -> Toast.makeText(this@HomeActivity, "相机权限授权失败", Toast.LENGTH_SHORT).show()                        }                    }                    override fun permissionRationale(code: Int) {                        when(code){                            1 -> Toast.makeText(this@HomeActivity, "请开启相机权限", Toast.LENGTH_SHORT).show()                        }                    }                })                // 权限完全被禁时回调函数中返回 intent 类型(系统设置界面)                .requestPageType(Permissions4M.PageType.ANDROID_SETTING_PAGE)                // 权限完全被禁时回调,接口函数中的参数 Intent 是由上一行决定的                .requestPage { _, p1 ->                    AlertDialog.Builder(this)                            .setMessage("相机权限申请:\n我们需要开启照相机的权限")                            .setPositiveButton("确定") { _, _ -> this.startActivity(p1) }                            .setNegativeButton("取消") { dialog, _ -> dialog.cancel() }                            .show()                }                .request()    }









原创粉丝点击