fragment请求权限不能回调onRequestPermissionsResult

如果在fragment中请求权限,可能存在不执行onRequestPermissionsResult方法。

解决:

注意!!!!!

在宿主activity中,一定要重写onRequestPermissionsResult并且带上下面这句话,不然fragment不回调onRequestPermissionsResult.

super.onRequestPermissionsResult(requestCode, permissions, grantResults)复制代码

private val permissionName1 = Manifest.permission.SEND_SMS
private val PERMISSIONCODE = 102if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
    if (context.checkSelfPermission(permissionName1) == PackageManager.PERMISSION_GRANTED) {
        //有权限,发送短信
        sendSms()
    } else {
        //没有权限,请求后再发送
        //fragment请求权限直接执行下面这个语句,如果是activity中请求权限
        //则,ActivityCompat.requestPermissions(this, arrayOf(permissionName1), REQUESTCODE)
        requestPermissions(arrayOf(permissionName1), PERMISSIONCODE)
    }
} else {
    sendSms()
}复制代码

override fun onRequestPermissionsResult(requestCode: Int, permissions: Array<out String>, grantResults: IntArray) {
    super.onRequestPermissionsResult(requestCode, permissions, grantResults)
    if (requestCode == PERMISSIONCODE) {
        if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
            //权限申请成功
            sendSms()
        } else {
            if (!shouldShowRequestPermissionRationale(permissionName1)) {
                //提示用户前往设置界面自己打开权限
                showSnackBar(resources.getString(R.string.permission_open), resources.getString(R.string.setting), View.OnClickListener {
                    val intent = Intent()
                    intent.action = Settings.ACTION_APPLICATION_DETAILS_SETTINGS
                    val uri = Uri.fromParts("package", BuildConfig.APPLICATION_ID, null)
                    intent.data = uri
                    intent.flags = Intent.FLAG_ACTIVITY_NEW_TASK
                    startActivity(intent)
                })
            } else {
                showSnackBar(resources.getString(R.string.permission_again), resources.getString(R.string.confirm), View.OnClickListener {
                    requestPermissions(arrayOf(permissionName1), PERMISSIONCODE)
                })
            }
        }
    }
}

private fun showSnackBar(contentText: String, buttonText: String, listener: View.OnClickListener) {
    Snackbar.make(activity!!.findViewById(android.R.id.content),
            contentText,
            Snackbar.LENGTH_INDEFINITE)
            .setAction(buttonText, listener).show()
}复制代码


转载于:https://juejin.im/post/5c04a7f76fb9a04a08216d77

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值