android动态权限 禁止,Android 动态权限库推荐

遇到很尴尬的动态权限问题,终于找到一个用起来比较舒服的库,教程也很详细

示例代码

// ---------------------------------- kotlin -------------------------------------------------

frame_version_update.setOnClickListener {

val rxPermissions = RxPermissions(this)

rxPermissions

.requestEach(WRITE_EXTERNAL_STORAGE)

.subscribe({ permission ->

if (permission.granted) {

VersionManager().checkUpdate(this, true)

} else if (permission.shouldShowRequestPermissionRationale) {

// 点击了禁止,没有勾选 禁止再次询问

} else {

// 勾选了 禁止再次询问,跳转到权限设置页

DialogUtlis.showDialog(this,"您已禁止存储权限,是否打开?","取消","去打开",object:DialogListenser{

override fun sure() {

val intent = Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);

val uri = Uri.fromParts("package",getPackageName(), null);

intent.setData(uri);

startActivityForResult(intent, 0)

}

})

}

})

}

// ---------------------------------- java -------------------------------------------------

RxPermissions rxPermissions = new RxPermissions(container.activity); // where this is an Activity instance

rxPermissions

.requestEach(Manifest.permission.RECORD_AUDIO)

.subscribe(permission -> {

if (permission.granted) {

} else if (permission.shouldShowRequestPermissionRationale) {

// 点击了禁止,没有勾选 禁止再次询问

} else {

// 勾选了 禁止再次询问,跳转到权限设置页

DialogUtlis.INSTANCE.showDialog(container.activity, container.activity.getResources().getString(R.string.permission_audio_tips)

, container.activity.getResources().getString(R.string.permission_cancel)

, container.activity.getResources().getString(R.string.permission_sure)

, new DialogListenser() {

@Override

public void sure() {

Intent intent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);

Uri uri = Uri.fromParts("package", container.activity.getPackageName(), null);

intent.setData(uri);

container.activity.startActivityForResult(intent, 0);

}

});

}

});

遇到的问题

多个权限,permission.granted 会被调多次,需要控制不要多次请求数据

rxPermissions

.requestEach(WRITE_EXTERNAL_STORAGE,READ_EXTERNAL_STORAGE)

.subscribe({ permission ->

if (permission.granted) {

// 两个权限,此回调会被调两次

} else if (permission.shouldShowRequestPermissionRationale) {

// 点击了禁止,没有勾选 禁止再次询问

} else {

// 勾选了 禁止再次询问,跳转到权限设置页

}

})

}

})

关于交互

用户禁止再次询问该权限,就不会再弹出权限申请框了

只能让用户去 设置-权限管理 中打开,才能使用相关功能。

可以直接跳转到权限设置页面

让用户通过很复杂的方式去打开权限是一个很糟糕的体验

跳转到权限设置页

val intent = Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);

val uri = Uri.fromParts("package", context.getPackageName(), null);

intent.setData(uri);

startActivityForResult(context as Activity, intent,0,null)

写在最后

简单封装一个Dialog工具类,没必要再导入一个Dialog的第三方库了,仅作记录:

/**

*

 
 

* author : 王宏杰

* time : 2018/06/19

* function : Dialog 简单封装

* version: 1.0

*

*/

object DialogUtlis {

fun showDialog(context: Context, title: String, btnLeft: String, btnRight: String,listenser:DialogListenser) {

val view = View.inflate(context, R.layout.layout_update_version, null)

val updateBtn = view.findViewById(R.id.btn_update)

val cancelBtn = view.findViewById(R.id.btn_cancel)

val content = view.findViewById(R.id.txt_login_out_content)

updateBtn.text = btnRight

cancelBtn.text = btnLeft

content.text = title

val dialog = Dialog(context)

dialog.requestWindowFeature(Window.FEATURE_NO_TITLE)

dialog.setContentView(view)

dialog.setCancelable(true)

dialog.window!!.setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT))

dialog.show()

updateBtn.setOnClickListener {

listenser.sure()

dialog.dismiss()

}

cancelBtn.setOnClickListener {

dialog.dismiss()

}

}

}

interface DialogListenser{

fun sure()

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值