1. 程式人生 > >Android學習筆記-Android6.0執行時許可權

Android學習筆記-Android6.0執行時許可權

Android許可權機制,在Android6.0之前,其實一直很簡單,在AndroidManifest.xml中進行許可權宣告,通過一個Intent呼叫即可。

以打電話為例:

<uses-permission android:name="android.permission.CALL_PHONE"></uses-permission>
 public void ButtonCall(View v){
        Intent intent = new Intent(Intent.ACTION_CALL);
        intent.setData(Uri.parse("tel:0123456789"
)); startActivity(intent); }

這裡寫圖片描述
介面很簡單,點選Button,打電話
這裡寫圖片描述
可以看到,打電話成功,那麼在Android6.0專案中也這麼幹,會怎樣呢?
接下來,手動更改編譯目標版本,
這裡寫圖片描述
然後Sync now一下,解除安裝之前的Demo版本,run一下。
點選打電話,然後崩了,如下圖:
這裡寫圖片描述
看一下logcat:
這裡寫圖片描述
很明顯。沒有執行時許可權,那麼,今天的重點來了,執行時許可權怎麼搞定。

Android6.0執行時許可權

主要有下面幾個步驟:

1. 在AndroidManifest.xml中進行許可權宣告(跟之前一樣)

2. 動態許可權申請

3. 重寫 onRequestPermissionsResult方法

4. 通過Intent呼叫

public class MainActivity extends AppCompatActivity {

    private Button buttonCall;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        buttonCall = (Button) findViewById(R.id.ButtonCall);
        buttonCall.setOnClickListener(new
View.OnClickListener() { @Override public void onClick(View v) { //判斷時候是否有“打電話許可權” if (ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.CALL_PHONE) != PackageManager.PERMISSION_GRANTED) { //沒有許可權,就申請許可權 ActivityCompat.requestPermissions(MainActivity.this, new String[]{Manifest.permission.CALL_PHONE}, 1); } else { //有許可權,呼叫打電話方法 MakeCall(); } } }); } public void MakeCall(){ try { Intent intent = new Intent(Intent.ACTION_CALL); intent.setData(Uri.parse("tel:0123456789")); startActivity(intent); }catch (SecurityException e){ e.printStackTrace(); } } @Override public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { switch (requestCode){ case 1: //判斷時候是否有“打電話許可權” if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED){ //有許可權,呼叫打電話方法 MakeCall(); }else{ //沒有許可權,給一個Toast提示 Toast.makeText(this,"您拒絕了許可權",Toast.LENGTH_SHORT).show(); } break; default: break; } } }

這裡寫圖片描述

點選允許,就可以打電話了,執行時許可權只在第一次申請時詢問,之後就不再顯示,不過可以再“設定”裡取消許可權。