Android執行時動態申請許可權完整例項
阿新 • • 發佈:2019-02-13
前言
在Android6.0之前,我們安裝App時會列出安裝的App的訪問許可權,並且只有安裝時會出現一次。一旦我們同意安裝了此App,這個App就可以在使用者毫不知情的情況下訪問許可權內的所有東西。eg:使用者的通訊資訊,使用者位置等資訊,這會侵犯使用者的隱私。在Android6.0以後就不會在出現安裝時授予許可權,取而代之的是,App必須在執行時詢問使用者來授予許可權。
直接上程式碼eg:
public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super |
當我們點選呼叫call方法,call方法首先判斷APP是否有permission.CALL_PHONE許可權,如果有直接呼叫callPhone方法來撥打電話,否則彈出提示框,如下:
onRequestPermissionsResult就是申請許可權的回撥,如果點選允許,則呼叫callPhone方法,否則執行
如果我們勾選了該選項,則下一次就不會彈出許可權申請提示框,而直接呼叫onRequestPermissionsResult,回撥結果為使用者最後一次的選擇,也就是:Toast.makeText(this,"許可權被拒絕",Toast.LENGTH_LONG).show()。
再次開啟該許可權:在手機:設定----->應用------->配置應用-------->應用許可權----->處理 不在詢問 選項:
如果使用者選擇了 不在詢問 選項,那麼每次呼叫許可權都會失敗,這給使用者帶來很不好的體驗,所以我們要給使用者一個友好的提示shouldShowRequestPermissionRationale(this, Manifest.permission.CALL_PHONE)方法會返回false,
我們可以做個彈出框給使用者一個提示,如下程式碼:
if (requestCode == 66) { if (grantResults[0] == PackageManager.PERMISSION_GRANTED) { callPhone(); } else { if (!ActivityCompat.shouldShowRequestPermissionRationale(this, Manifest.permission.CALL_PHONE)) { AlertDialog alertDialog = new AlertDialog.Builder(this) .setMessage("提示") .setPositiveButton("確定", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { } }) .create(); alertDialog.show(); } Toast.makeText(this, "許可權被拒絕", Toast.LENGTH_LONG).show(); } } } |
到此結束!!!