安卓學習之請求權限

1.向清單添加權限

聲明權限在 AndroidManifest.xml文件中

在manifest的內部可以添加權限:

這裏就是添加了訪問互聯網的權限。

注意:

雖然很多情況下,你聲明瞭權限,但是系統會根據權限對於用戶的敏感程度來判斷是否

獲得這個權限。有些時候,即便你設置了這個權限你也可能需要去向用戶申請權限。

要想查看權限的訪問等級,可以看這裏https://developer.android.google.cn/guide/topics/permissions/overview.html#normal-dangerous

2.檢查權限

從安卓6.0開始,當你進行一些危險的操作的時候,你必須檢查是否具有這個權限,因爲

現在的用戶可以隨時取消你的權限。

代碼如下:

  if(ContextCompat.checkSelfPermission(getApplicationContext(),
                 Manifest.permission.CALL_PHONE)!= PackageManager.PERMISSION_GRANTED)
                {
                    //權限的檢查
                }

如果應用具有此權限,該方法將返回 PERMISSION_GRANTED,並且應用可以繼續操作。如果應用不具備此權限,該方法將返回 PERMISSION_DENIED。

3.請求權限

在請求權限前你應該檢查,用戶以前是否拒絕了這一權限,然後你可以做出合理

的解釋。

代碼如下

 if (ContextCompat.checkSelfPermission(getApplicationContext(), Manifest.permission.
                        CALL_PHONE) != PackageManager.PERMISSION_GRANTED) {
                       //檢查權限
                    if(ActivityCompat.shouldShowRequestPermissionRationale(MainActivity.this,Manifest.permission
                    .CALL_PHONE))
                    {
                        //這個函數是用來判斷用戶是否拒絕過這個權限,你應該做出解釋
                    }
                    else
                    {
                        ActivityCompat.requestPermissions(MainActivity.this,
                                new String[]{Manifest.permission.CALL_PHONE},0);
                        //這個函數是申請權限
                    }
                }

注意申請權限的方法,這是一個異步方法,會在用戶選擇後調用相應的回調方法。

4.權限處理

 public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        //這是回調方法
        switch (requestCode)
        {
            case 0:
                if(grantResults.length>0&&grantResults[0]==PackageManager.PERMISSION_GRANTED)
                {
                    //說明具有權限
                }
                else
                {
                    
                }
        }
    }

當然,你也可以使用權限來進行判斷。代碼如下

 switch (permissions[0])
        {
            case Manifest.permission.CALL_PHONE:
                if(grantResults.length>0&&grantResults[0]==PackageManager.PERMISSION_GRANTED)
                {
                    Intent intent=new Intent();
                    intent.setAction(Intent.ACTION_CALL);
                    startActivity(intent);
                }

        }

 

發佈了136 篇原創文章 · 獲贊 9 · 訪問量 8070
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章