1.向清單添加權限
聲明權限在 AndroidManifest.xml文件中
在manifest的內部可以添加權限:
這裏就是添加了訪問互聯網的權限。
注意:
雖然很多情況下,你聲明瞭權限,但是系統會根據權限對於用戶的敏感程度來判斷是否
獲得這個權限。有些時候,即便你設置了這個權限你也可能需要去向用戶申請權限。
要想查看權限的訪問等級,可以看這裏https://developer.android.google.cn/guide/topics/permissions/overview.html#normal-dangerous
2.檢查權限
從安卓6.0開始,當你進行一些危險的操作的時候,你必須檢查是否具有這個權限,因爲
現在的用戶可以隨時取消你的權限。
代碼如下:
if(ContextCompat.checkSelfPermission(getApplicationContext(),
Manifest.permission.CALL_PHONE)!= PackageManager.PERMISSION_GRANTED)
{
//權限的檢查
}
如果應用具有此權限,該方法將返回 PERMISSION_GRANTED
,並且應用可以繼續操作。如果應用不具備此權限,該方法將返回 PERMISSION_DENIED。
3.請求權限
在請求權限前你應該檢查,用戶以前是否拒絕了這一權限,然後你可以做出合理
的解釋。
代碼如下
if (ContextCompat.checkSelfPermission(getApplicationContext(), Manifest.permission.
CALL_PHONE) != PackageManager.PERMISSION_GRANTED) {
//檢查權限
if(ActivityCompat.shouldShowRequestPermissionRationale(MainActivity.this,Manifest.permission
.CALL_PHONE))
{
//這個函數是用來判斷用戶是否拒絕過這個權限,你應該做出解釋
}
else
{
ActivityCompat.requestPermissions(MainActivity.this,
new String[]{Manifest.permission.CALL_PHONE},0);
//這個函數是申請權限
}
}
注意申請權限的方法,這是一個異步方法,會在用戶選擇後調用相應的回調方法。
4.權限處理
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
//這是回調方法
switch (requestCode)
{
case 0:
if(grantResults.length>0&&grantResults[0]==PackageManager.PERMISSION_GRANTED)
{
//說明具有權限
}
else
{
}
}
}
當然,你也可以使用權限來進行判斷。代碼如下
switch (permissions[0])
{
case Manifest.permission.CALL_PHONE:
if(grantResults.length>0&&grantResults[0]==PackageManager.PERMISSION_GRANTED)
{
Intent intent=new Intent();
intent.setAction(Intent.ACTION_CALL);
startActivity(intent);
}
}