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" />
    <!--位置-->

.
.
.
.
.
.

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的代碼
            //            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) {
                    onGranted()
                } else {
                    dialog.show()
                }
            }
}

demo的下載地址爲:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章