關於動態許可權申請,多個動態許可權申請
阿新 • • 發佈:2019-01-03
public final static int REQUEST_READ_PHONE_STATE = 1;加上這個定義,忘記新增到程式碼片了,我的問題,這次補上了。
protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //“Manifest.permission.”後面接上要申請的許可權,我這裡是讀取許可權 int permissionCheck = ContextCompat.checkSelfPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE); if (permissionCheck != PackageManager.PERMISSION_GRANTED) { //進入到這裡代表沒有許可權. ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, REQUEST_READ_PHONE_STATE); } else { //有許可權,這裡面新增需要許可權的方法 } } //新增許可權,我這裡是讀取許可權,可以不用動這段程式碼 @Override public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) { switch (requestCode) { case REQUEST_READ_PHONE_STATE: if ((grantResults.length > 0) && (grantResults[0] == PackageManager.PERMISSION_GRANTED)) { //使用者同意授權,這裡面新增需要許可權的方法 }//else 使用者拒絕授權 break; default: break; } } public void Read(View v) { //檢查許可權,將讀許可權換成你要申請的許可權 if (ContextCompat.checkSelfPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) { //進入到這裡代表沒有許可權.“Manifest.permission.”後面同上一樣,換成你要申請的許可權 if (ActivityCompat.shouldShowRequestPermissionRationale(this, Manifest.permission.READ_EXTERNAL_STORAGE)) { //已經禁止提示了 Toast.makeText(ContrastActivity.this, "您已禁止該許可權,需要重新開啟。", Toast.LENGTH_SHORT).show(); } else { ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, REQUEST_READ_PHONE_STATE); } } else { //執行需要許可權的方法或語句 } }
現在我們常常在敲程式碼執行app的時候,會遇到需要申請許可權的問題,而我們又在AndroidMainfest.xml檔案里加入了許可權,這是因為在android 6.0以上需要申請動態許可權,下面我將申請動態許可權的格式發下,希望為和我一樣遇到這個問題的人解決下問題。至於為什麼要動態申請許可權,你們可以百度下,有比我功力精深的講解過,建議把危險許可權看下,多注意,以後在開發中少不了多打交道的。
上面的程式碼就是動態申請許可權的格式了,一些注意點我都註釋了,新手在學習中,如果有什麼地方疏漏的請指點,你們的建議和指點是我前進的明燈
下面是多個的動態申請方法,然後OnCreat方法裡呼叫permission就行了
//許可權獲取 private void permission() { List<String> permissionLists = new ArrayList<>(); if (ContextCompat.checkSelfPermission(this, Manifest.permission.READ_PHONE_STATE) != PackageManager.PERMISSION_GRANTED) { permissionLists.add(Manifest.permission.READ_PHONE_STATE); } if (ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) { permissionLists.add(Manifest.permission.WRITE_EXTERNAL_STORAGE); } if (!permissionLists.isEmpty()) {//說明肯定有拒絕的許可權 ActivityCompat.requestPermissions(this, permissionLists.toArray(new String[permissionLists.size()]), PERMISSION_REQUESTCODE); } else { Toast.makeText(this, "許可權都授權了,可以搞事情了", Toast.LENGTH_SHORT).show(); } } @Override public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { super.onRequestPermissionsResult(requestCode, permissions, grantResults); switch (requestCode) { case PERMISSION_REQUESTCODE: if (grantResults.length > 0) { for (int grantResult : grantResults) { if (grantResult != PackageManager.PERMISSION_GRANTED) { Toast.makeText(this, "某一個許可權被拒絕了", Toast.LENGTH_SHORT).show(); return; } } //其他邏輯(這裡當權限都同意的話就執行打電話、獲取本地資訊等邏輯) } break; default: break; } }