1

연락처를 업로드하기 전에 사용자에게 연락처 권한을 요청해야하는 Android 응용 프로그램에서 작업하고 있습니다. 아래 코드는 Build.VERSION.SDK_INT >= Build.VERSION_CODES.M에 대한 연락처 허가를 위해 사용하고있는 코드입니다.모든 안드로이드 버전에 대한 문의 권한

하지만 문제는 내가 안드로이드 M에 항상 아래의 경우에도 접촉 권한을 요청해야한다는 것입니다. 모든 SDK 버전에서 작동해야하는 연락처 권한을 요청하는 방법

private void getContact(){ 
//  Intent intent = new Intent(Intent.ACTION_PICK, ContactsContract.Contacts.CONTENT_URI); 
//  startActivityForResult(intent, PICK_CONTACT); 
    } 

    public void askForContactPermission(){ 
     if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { 
      if (ContextCompat.checkSelfPermission(this,Manifest.permission.READ_CONTACTS) != PackageManager.PERMISSION_GRANTED) { 

       // Should we show an explanation? 
       if (ActivityCompat.shouldShowRequestPermissionRationale(this, 
         Manifest.permission.READ_CONTACTS)) { 
        AlertDialog.Builder builder = new AlertDialog.Builder(this); 
        builder.setTitle("Contacts access needed"); 
        builder.setPositiveButton(android.R.string.ok, null); 
        builder.setMessage("please confirm Contacts access");//TODO put real question 
        builder.setOnDismissListener(new DialogInterface.OnDismissListener() { 
         @TargetApi(Build.VERSION_CODES.M) 
         @Override 
         public void onDismiss(DialogInterface dialog) { 
          requestPermissions(
            new String[] 
              {Manifest.permission.READ_CONTACTS} 
            , PERMISSION_REQUEST_CONTACT); 
         } 
        }); 
        builder.show(); 
        // Show an expanation to the user *asynchronously* -- don't block 
        // this thread waiting for the user's response! After the user 
        // sees the explanation, try again to request the permission. 

       } else { 

        // No explanation needed, we can request the permission. 

        ActivityCompat.requestPermissions(this, 
          new String[]{Manifest.permission.READ_CONTACTS}, 
          PERMISSION_REQUEST_CONTACT); 

        // MY_PERMISSIONS_REQUEST_READ_CONTACTS is an 
        // app-defined int constant. The callback method gets the 
        // result of the request. 
       } 
      }else{ 
       getContact(); 
      } 
     } 
     else{ 
      getContact(); 
     } 
    } 

    int PERMISSION_REQUEST_CONTACT = 1; 

    @Override 
    public void onRequestPermissionsResult(int requestCode, 
              String permissions[], int[] grantResults) { 
     switch (requestCode) { 
      case 1: { 
       // If request is cancelled, the result arrays are empty. 
       if (grantResults.length > 0 
         && grantResults[0] == PackageManager.PERMISSION_GRANTED) { 
//     getContact(); 
        Toast.makeText(getApplicationContext(),"Permission is Done",Toast.LENGTH_LONG).show(); 
        // permission was granted, yay! Do the 
        // contacts-related task you need to do. 

       } else { 
        Toast.makeText(getApplicationContext(),"No permission for contacts",Toast.LENGTH_LONG).show(); 
        // permission denied, boo! Disable the 
        // functionality that depends on this permission. 
       } 
       return; 
      } 

      // other 'case' lines to check for other 
      // permissions this app might request 
     } 
    } 
+3

이하 M을 입력하면 매니페스트 파일을 제외하고 외부 코드를 작성할 필요가 없습니다. – Spartan

+0

@PushpendraChoudhary 여기에 의견을 보내 주셔서 감사합니다. 사실 내 요구 사항은 연락처 권한에 대한 메시지를 표시하는 것입니다. 아래 Android M에 프로그래밍 가능하게 문의 권한을 요청할 수 있습니까? –

+0

문제는 Android M 아래에서 연락처 권한을 요청하지 않습니다. 이 SDK 수준 아래에서도 대화 상자를 표시해야합니다. –

답변

1

항상 대화 상자를 표시되는지, 권한 요청 대화 상자를 표시하는 방법을 작성,하지만 안드로이드 M과에 권한 API 호출

public void showDialog() { 
    AlertDialog.Builder builder = new AlertDialog.Builder(this); 
    builder.setTitle("Contacts access needed"); 
    builder.setPositiveButton(android.R.string.ok, null); 
    builder.setMessage("please confirm Contacts access"); 
    builder.setOnDismissListener(new DialogInterface.OnDismissListener() { 
     @Override 
     public void onDismiss(DialogInterface dialog) { 
      // Only call the permission request api on Android M 
      if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { 
       requestPermissions(new String[]{Manifest.permission.READ_CONTACTS}, PERMISSION_REQUEST_CONTACT); 
      } 
     } 
    }); 
    builder.show(); 
} 
안드로이드 M에 그런

이상 만은 필요할 경우 M 이하로 전화하십시오. 항상

public void askForContactPermission(){ 
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { 
     if (ContextCompat.checkSelfPermission(this,Manifest.permission.READ_CONTACTS) != PackageManager.PERMISSION_GRANTED) { 
      if (ActivityCompat.shouldShowRequestPermissionRationale(this, Manifest.permission.READ_CONTACTS)) { 
       showDialog(); 
      } 
     } 
    } else { 
     showDialog(); 
    } 
} 
+0

답변 해 주셔서 감사합니다. 나는이 코드를 넣었지만 여전히 허가를 요청하지 않고있다. 이 조건 (ContextCompat.checkSelfPermission (this, Manifest.permission.READ_CONTACTS)! = PackageManager.PERMISSION_GRANTED) { –

+0

}은 사용자가 이미이 권한을 사용자에게 부여했음을 의미합니다. 새 사용자, 휴대 전화의 설정 앱> 앱> 앱> 권한> 모든 권한 해제 – marmor