第一行代碼 第三版 第8章 ContentProvider 8.2 運行時權限

8.2 運行時權限

Android6.0時引入的,爲了更好地保護用戶的安全和隱私。

8.2.1 Android 權限機制詳解

Android中常用的權限分成了兩類:普通權限和危險權限。(還有特殊權限,使用比較少)
危險權限必須由用戶手動授權纔可以,因爲危險權限可能會觸及用戶隱私或者對設備安全性造成影響的權限。

8.2.2 在程序運行時申請權限

下面就是比較完整的 申請一個權限的代碼:(連續同時申請幾個權限,代碼存在差異)。
第一步判斷用戶是否已經授權了 :ContextCompat.checkSelfPermission()方法,該方法有兩個參數,context,第二個參數是具體的權限名;如:ContextCompat.checkSelfPermission(this,android.Manifest.permission.CALL_PHONE);將這個方法的返回值和PackageManager.PERMISSION_GRANTED 比較:相等則表示用戶已經授權了。
第二步若沒有授權則進行權限申請 :調用ActivityCompat.requestPermissions()方法向用戶申請權限。該方法有是三個參數:第一個參數:要求是Activity的實例;第二個參數是一個string數組;第三個參數是一個請求碼,要保證該值是唯一的;如:ActivityCompat.requestPermissions(this, arrayOf(android.Manifest.permission.CALL_PHONE),1)

override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        makeCall.setOnClickListener {
		//第一步判斷用戶是否已經授權了            
            if(ContextCompat.checkSelfPermission(this,android.Manifest.permission.CALL_PHONE)!= PackageManager.PERMISSION_GRANTED){
                ActivityCompat.requestPermissions(this, arrayOf(android.Manifest.permission.CALL_PHONE),1)
            }else{
                call()
            }
        }
    }

    override fun onRequestPermissionsResult(requestCode: Int, permissions: Array<out String>, grantResults: IntArray) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults)
        when(requestCode){
            1 ->{
                if(grantResults.isNotEmpty() && grantResults[0] == PackageManager.PERMISSION_GRANTED){
                    call()
                }else{
                    Toast.makeText(this,"You denied the permission",Toast.LENGTH_SHORT).show()
                }
            }
        }
    }

    private fun call(){
        try {
            val intent  = Intent(Intent.ACTION_CALL)
            intent.data = Uri.parse("tel:15181802534")
            startActivity(intent)
        }catch (e:SecurityException){
            e.printStackTrace()
        }
    }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章