Android 权限管理(Kotlin)

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

前段日子看了个好心人大神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()
    }









猜你喜欢

转载自blog.csdn.net/geanwen/article/details/78220842