kotlin动态批量获取权限的扩展函数

动态批量获取权限的扩展函数

简介

每个app必定都需要使用到获取权限的功能,所以把这个做成扩展函数是必要的,方便,而且随时可以调用。
这篇文章是关于批量的获取用户权限的功能。
运行图片:
在这里插入图片描述

代码

manifest.xml

	<!-- 录像 -->
    <uses-feature android:name="android.hardware.camera"/>
    <uses-feature android:name="android.hardware.camera.autofocus"/>
    <uses-permission android:name="android.permission.CAMERA" />
    <!--录音-->
    <uses-permission android:name="android.permission.RECORD_AUDIO" />
    <!--存储-->
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
    <!--位置-->

.
.
.
引入依赖

	implementation 'ru.alexbykov:nopermission:1.1.2'
    implementation 'com.tbruyelle.rxpermissions2:rxpermissions:0.9.5@aar'
    implementation 'io.reactivex.rxjava2:rxandroid:2.0.1'

.
.
.

Activity中调用:

class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        rxRequestPermissions(Manifest.permission.CAMERA, Manifest.permission.WRITE_EXTERNAL_STORAGE,
                Manifest.permission.RECORD_AUDIO, Manifest.permission.ACCESS_FINE_LOCATION,describe = "相机、存储、录音、位置") {
            //此处可以写跳转到另一个activity的代码
            Log.d("WY+","允许了==2")          //startActivityForResult(Intent(this@MainActivity, VideoRecordActivity::class.java), REQUEST_VIDEO)
        }
    }
}

.
.
.
.
.
.
.
.
重点来了:
在activity上添加扩展函数

//传入权限与权限描述,在需要权限的功能打开之前调用,vararg代表的是可变参数
fun Activity.rxRequestPermissions(vararg permissions: String, describe: String, onGranted:()->Unit) {//onGranted是回调
    val keylistener = DialogInterface.OnKeyListener { _, keyCode, event ->
        keyCode == KeyEvent.KEYCODE_BACK && event.repeatCount == 0
    }
    //有一项权限用户不允许的话就进入到这里对话框
    var dialog = AlertDialog.Builder(this)
            .setTitle("权限申请")
            .setMessage("${describe}为必选项,开通后方可正常使用APP,请在设置中开启。")
            .setOnKeyListener(keylistener)
            .setCancelable(false)
            .setPositiveButton("去开启") { _, _ ->
//                JumpPermissionManagement.GoToSetting(this)
                finish()
            }
            .setNegativeButton("结束") { _, _ ->
                Toast.makeText(this, "${describe}权限未开启,不能使用该功能!", Toast.LENGTH_SHORT).show()
                finish()
            }
            .create()
    val rxPermissions = RxPermissions(this)
    //传递kotlin的可变长参数给Java的可变参数的时候需要使用修饰符 * ;这个修饰符叫做Speread Operator
    // 它只支持展开的Array 数组,不支持List集合,它只用于变长参数列表的实参,不能重载,它也不是运算符;
    rxPermissions.request(*permissions)
            .subscribe {granted ->
                if (granted) {
                Log.d("WY+","允许了==1")
                    onGranted()
                } else {
                    dialog.show()
                }
            }
}

demo的下载地址为:

原创文章 38 获赞 39 访问量 6万+

猜你喜欢

转载自blog.csdn.net/wy313622821/article/details/106071427