在6.0之前我們呼叫CALL_PHONE是很超簡單的事
1 先去AndroidManifest 設定Permissions
2 在Activity內呼叫Intent 呼叫一下搞定!!
到了6.0尷尬了~~他將權限分為危險與普通,危險的如以下
常用的我把他標起來
| Permission Group | Permissions |
|---|---|
CALENDAR | |
CAMERA | |
CONTACTS | |
LOCATION | |
MICROPHONE | |
PHONE | |
SENSORS | |
SMS | |
STORAGE |
1 還是需要去AndroidManifest 設定Permissions
2 在你需使用CALL_PHONE之前呼叫
int permission = checkSelfPermission(CALL_PHONE);以上主要是檢查是否已通過此CALL_PHONE權限
3 checkSelfPermission 回傳值是一個整數,可用以下常數判定是否通過此權限
//已擁有權限-PackageManager.PERMISSION_GRANTED
//無權限-PackageManager.PERMISSION_DENIED
4如果沒有通過權限就呼叫requestPermissions 跳出視窗請使用者選是否要開啟權限,這邊注意一下requestPermissions方法 ,中的字串陣列是來自於
android.Manifest.permission.*;
參數中的100是定義一個requestCode 可隨意定,之後會用到程式範例如下:
@SuppressWarnings("MissingPermission") private void call(){ Intent in = new Intent(Intent.ACTION_CALL);
in.setData(Uri.parse("tel:123"));
startActivity(in);}
public void click(View view){ if (checkVesrion()) { int permission = checkSelfPermission(CALL_PHONE);if (permission == PackageManager.PERMISSION_DENIED) { requestPermissions(new String[]{CALL_PHONE},100); } else { call();//呼叫打電話} } }
4 執行後會彈出如圖所示的選單讓我們確定是否要開啟權限

5 那如何知道使用者選的是拒絕 還是允許呢?
必須複寫Activity的
public void onRequestPermissionsResult(int requestCode,
String[] permissions,
int[] grantResults)
注意當中的requestCode就是requestPermissions中設定的100
可使用grantResults陣列判定是否取得權限如下所程式碼
//已擁有權限-PackageManager.PERMISSION_GRANTED
//無權限-PackageManager.PERMISSION_DENIED
@Override
public void onRequestPermissionsResult(int requestCode,
String[] permissions, int[] grantResults) { if (requestCode == 100 && grantResults[0] ==PackageManager.PERMISSION_GRANTED ){ call();//呼叫打電話 } }
沒有留言:
張貼留言