第一件事注意你使用的Android SDK必須是6.0或以上的歐
在6.0之前我們呼叫CALL_PHONE是很超簡單的事
1 先去AndroidManifest 設定Permissions
2 在Activity內呼叫Intent 呼叫一下搞定!!
到了6.0尷尬了~~他將權限分為危險與普通,危險的如以下
常用的我把他標起來
這一來就需要額外的動作了,這邊我用CALL_PHONE為例簡單說一下首先
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();//呼叫打電話 }
}