参考文章 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方法执行")
}
}