BaseActivity中权限申请封装Kotlin实现
·
abstract class BaseActivity : AppCompatActivity() {
/**
* 权限请求回调。
*/
private lateinit var permissionsResult: OnPermissionResult
companion object {
const val REQ_PERMISSION_CODE = 10000
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
}
////////////////////////////////////权限相关/////////////////////////////////////////////////////
fun permissions(permissions: Array<out String>, result: OnPermissionResult) {
permissionsResult = result
// 过滤没有申请的权限.
val deniedPermissions = permissions.filter {
ActivityCompat.checkSelfPermission(this, it) != PackageManager.PERMISSION_GRANTED
}
if (deniedPermissions.isNullOrEmpty()) { // 权限全部都同意了。
permissionsResult.onPermissionGranted()
} else { // 重新申请没有申请的权限。
ActivityCompat.requestPermissions(this, permissions, REQ_PERMISSION_CODE);
}
}
override fun onRequestPermissionsResult(
requestCode: Int, permissions: Array<out String>, grantResults: IntArray
) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults)
if (requestCode == REQ_PERMISSION_CODE) {
// 过滤拒绝的权限.
val deniedPermissions = permissions.filter {
ActivityCompat.checkSelfPermission(this, it) != PackageManager.PERMISSION_GRANTED
}
if (deniedPermissions.isNullOrEmpty()) {
permissionsResult.onPermissionGranted()
} else {
permissionsResult.onPermissionDenied(deniedPermissions)
}
}
}
interface OnPermissionResult {
fun onPermissionGranted()
fun onPermissionDenied(permissions: List<String>)
}
// 定义几个常用权限。
// 相机权限。
// <uses-permission android:name="android.permission.CAMERA" />
fun requestCameraPermission(permissionResult: OnPermissionResult) {
permissions(arrayOf(Manifest.permission.CAMERA), permissionResult)
}
// sd 卡权限。
// <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
// <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
fun requestSDCardPermission(permissionResult: OnPermissionResult) {
permissions(
arrayOf(
Manifest.permission.WRITE_EXTERNAL_STORAGE,
Manifest.permission.READ_EXTERNAL_STORAGE
), permissionResult
)
}
// 位置权限。
// <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
// <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
fun requestLocationPermission(permissionResult: OnPermissionResult) {
permissions(
arrayOf(
Manifest.permission.ACCESS_FINE_LOCATION,
Manifest.permission.ACCESS_COARSE_LOCATION
), permissionResult
)
}
}
更多推荐



所有评论(0)