本文參考自郭霖《第一行代碼》第2版宰译,本文是學(xué)習(xí)筆記,供初學(xué)者參考魄懂。
Android權(quán)限機(jī)制從第一個(gè)版本就是有的沿侈,但是早期的這個(gè)機(jī)制形同虛設(shè),沒有安全和隱私可言市栗。
直到Android6.0引入運(yùn)行時(shí)權(quán)限這個(gè)功能缀拭,目的是為了保護(hù)用戶的安全和隱私。
安卓權(quán)限有上百種,分為普通權(quán)限和危險(xiǎn)權(quán)限智厌,對于危險(xiǎn)權(quán)限诲泌,必須由用戶手動(dòng)點(diǎn)擊授權(quán)才可以。
下面是CALL_PHONE(危險(xiǎn)權(quán)限)的demo:
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button makeCall = findViewById(R.id.make_call);
makeCall.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(checkSelfPermission(Manifest.permission.CALL_PHONE)
!= PackageManager.PERMISSION_GRANTED){//判斷用戶是否已經(jīng)授權(quán)铣鹏,若無授權(quán)
requestPermissions(new String[]{Manifest.permission.CALL_PHONE}, 1);
}else{//若已經(jīng)授權(quán)
call();
}
}
});
}
/**
* 跳轉(zhuǎn)到電話頁面敷扫,撥打10086,使用tel協(xié)議
*/
private void call(){
try{
Intent intent = new Intent(Intent.ACTION_CALL);
intent.setData(Uri.parse("tel:10086"));
startActivity(intent);
}catch (SecurityException e){
e.printStackTrace();
}
}
/**
*
* @param requestCode 請求碼
* @param permissions 權(quán)限數(shù)組
* @param grantResults 授權(quán)結(jié)果
*/
@Override
public void onRequestPermissionsResult(int requestCode,
String[] permissions, int[] grantResults) {
// super.onRequestPermissionsResult(requestCode, permissions, grantResults);
switch (requestCode){
case 1:
if(grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED){
call();
} else {
Toast.makeText(this, "You denied the permission",
Toast.LENGTH_SHORT).show();
}
break;
default:
break;
}
}
}