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
        )
    }

}

 

Logo

开源鸿蒙跨平台开发社区汇聚开发者与厂商,共建“一次开发,多端部署”的开源生态,致力于降低跨端开发门槛,推动万物智联创新。

更多推荐