EasyPermission 使用

993 阅读1分钟

参考文章 www.jianshu.com/p/f89721e2b…

存在的问题

使用很麻烦,很多回调,没有线性处理。

具体实现

class MainActivity : AppCompatActivity(), EasyPermissions.PermissionCallbacks {
    val TAG = "MainActivity"

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        Log.e(TAG, "onCreate")

        request()
    }

    // 被@AfterPermissionGranted注解的方法会在请求码中的所有权限申请成功之后被调用
    @AfterPermissionGranted(1)
    fun test() {
        Log.e(TAG, "test方法")
    }

    private fun request() {
        val permissions = arrayOf(
            Permission.CAMERA,
            Permission.READ_EXTERNAL_STORAGE,
            Permission.READ_PHONE_STATE
        )
        //判断有没有权限
        if (EasyPermissions.hasPermissions(this, *permissions)) {
            // 如果有权限了, 就做你该做的事情
            Log.e(TAG, "所有权限都已经有了")
        } else {
            Log.e(TAG, "有些权限就没有")
            // 如果没有权限, 就去申请权限
            // this: 上下文
            // Dialog显示的正文
            // RC_CAMERA_AND_RECORD_AUDIO 请求码, 用于回调的时候判断是哪次申请
            // perms 就是你要申请的权限
            EasyPermissions.requestPermissions(
                this,
                "写上你需要用权限的理由, 是给用户看的",
                1,
                *permissions
            )
        }
    }

    override fun onPermissionsGranted(requestCode: Int, perms: MutableList<String>) {
        Log.e(TAG, "权限申请了," + perms.joinToString())
        for (temp in perms) {
            if (temp.equals(Permission.READ_PHONE_STATE)) {
                Log.e(TAG, "READ_PHONE_STATE 权限申请了")
            }
            if (temp.equals(Permission.CAMERA)) {
                Log.e(TAG, "CAMERA 权限申请了")
            }
            if (temp.equals(Permission.READ_EXTERNAL_STORAGE)) {
                Log.e(TAG, "READ_EXTERNAL_STORAGE 权限申请了")
            }
        }
    }

    override fun onPermissionsDenied(requestCode: Int, perms: MutableList<String>) {
        Log.e(TAG, "权限拒绝了," + perms.joinToString())

        //如果有一些权限被永久的拒绝, 就需要转跳到 设置-->应用-->对应的App下去开启权限
        //如果有一些权限被永久的拒绝, 就需要转跳到 设置-->应用-->对应的App下去开启权限
        if (EasyPermissions.somePermissionPermanentlyDenied(this, perms)) {
            AppSettingsDialog.Builder(this)
                .setTitle("权限已经被您拒绝")
                .setRationale("如果不打开权限则无法使用该功能,点击确定去打开权限")
                .setRequestCode(10001) //用于onActivityResult回调做其它对应相关的操作
                .build()
                .show()
        }
    }


    override fun onRequestPermissionsResult(
        requestCode: Int,
        permissions: Array<out String>,
        grantResults: IntArray
    ) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults)
        EasyPermissions.onRequestPermissionsResult(requestCode, permissions, grantResults, this);
        Log.e(TAG, "onRequestPermissionsResult方法执行")
    }
    
}