HTML/JavaScript小工具

HTML/JavaScript小工具

2017年2月14日 星期二

寫一篇android 6.0權限的文章

第一件事注意你使用的Android SDK必須是6.0或以上的歐

在6.0之前我們呼叫CALL_PHONE是很超簡單的事
1 先去AndroidManifest 設定Permissions
2 在Activity內呼叫Intent 呼叫一下搞定!!

到了6.0尷尬了~~他將權限分為危險與普通,危險的如以下
常用的我把他標起來
Permission GroupPermissions
CALENDAR
CAMERA
CONTACTS
LOCATION
MICROPHONE
PHONE
SENSORS
SMS
STORAGE
這一來就需要額外的動作了,這邊我用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();//呼叫打電話    }
}

沒有留言:

張貼留言