ps:打算从简书搬到掘金来了,简书没讨论氛围,发了好久也不见有人讨论,还是掘金人气旺,氛围好,记得16年刚注册那会还不让发帖呢,申请作家都不给通过...
有轮子就不要再自己造轮子了,这是行业公认的,我这里不是从头写一个权限库,而是在开源组件上再封装以统一公司内部调用,随时可以替换第三方实现,从开源库再封装这个角度来写文章的很少,我这里带大家领略另一番风景,先说好不喜勿喷啊,我这水平幼儿园都没毕业呢
项目地址:BW_Libs
https%3A%2F%2Fgithub.com%2Fzb25810045%2FBW_Libs
先看下 Demo 的 代码
不上 gif 了,录这个时间太长,gif 太大网页很卡。Demo 的思路如下,正常的判断权限,有3个回调,用户确认给予权限,用户不给,和用户点选不在显示系统权限弹窗。这里我们在用户不显示弹窗后的回调里启动系统权限设置页,在用户关闭权限设置页面过后,我们再检测下=刚刚用户给没给权限,没给权限的话就自己显示个弹窗,提示用户不给权限就关闭页面
Demo 代码如下:
class PermissionActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_permission)
btn_permission.setOnClickListener{
PermissionManage
.with(this)
.permission(Manifest.permission.CALL_PHONE)
.permission(Manifest.permission.CAMERA)
.permission(Manifest.permission.READ_PHONE_STATE)
.onSuccess { Toast.makeText(this@PermissionActivity, "申请成功", Toast.LENGTH_SHORT).show() }
.onDenial { Toast.makeText(this@PermissionActivity, "用户拒绝", Toast.LENGTH_SHORT).show() }
.onDontShow { IntentUtils.startSettingActivityForResult(this, 200) }
.run()
}
}
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
if (requestCode == 200) {
var permissions = listOf(Manifest.permission.CALL_PHONE, Manifest.permission.CAMERA, Manifest.permission.READ_PHONE_STATE)
if (PermissionManage.isHavePermissions(this, permissions)) {
Toast.makeText(this, "欢迎您给予的权限", Toast.LENGTH_SHORT).show()
} else {
showDialog()
}
}
}
private fun showDialog() {
var build: AlertDialog.Builder = AlertDialog.Builder(this)
build.setMessage("缺乏权限,请求您给予权限")
build.setPositiveButton("申请权限", object : DialogInterface.OnCli