Android學習筆記-Android6.0執行時許可權
阿新 • • 發佈:2019-01-03
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;
}
}
}
點選允許,就可以打電話了,執行時許可權只在第一次申請時詢問,之後就不再顯示,不過可以再“設定”裡取消許可權。