2016-07-18 1 views
2

런타임 권한을 구현하는 데 문제가 있습니다. 나는 실행 권한을 구현하기위한 아래 링크를 통해 갔다 :.API 23의 Manifest.permission.MODIFY_PHONE_STATE에 대한 requestPermissions()가 작동하지 않습니다.

https://developer.android.com/training/permissions/requesting.html

내가 android.permission.MODIFY_PHONE_STATE에 대한 문제에 직면 "단지 내가 카메라 권한을 제대로 작동 카메라 권한과 코드를 아래의 코드를 테스트 한

. 내가 직면하고

문제 :

  1. shouldShowRequestPermissionRationale()는 체육을 부여하지 않음) (거짓
  2. requestPermissions을 반환 rmision.

학년 세부 : compileSdkVersion 23 buildToolsVersion "23.0.3", targetSdkVersion을 23

매니페스트 상세 사항 : 이름 = "android.permission : 나는

안드로이드-권한 사용하여 다음과 같은 권한을 추가했습니다. 액세스하거나 앱에서이 권한을 사용할 수 있도록 MODIFY_PHONE_STATE "

private static final int PERMISSIONS_REQUEST_CODE = 123; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     int granted = PackageManager.PERMISSION_GRANTED; 
     int result = ContextCompat.checkSelfPermission(ActivityMain.this,Manifest.permission.MODIFY_PHONE_STATE); 

    if (result == granted) { 
     Toast.makeText(ActivityMain.this,"permissions granted",Toast.LENGTH_LONG).show(); 

    } 
    if (result != PackageManager.PERMISSION_GRANTED) { 
     Toast.makeText(ActivityMain.this, "permissions denied", Toast.LENGTH_LONG).show(); 
     boolean res = ActivityCompat.shouldShowRequestPermissionRationale(ActivityMain.this,Manifest.permission.MODIFY_PHONE_STATE); 
// returning false 
     if (res) { 
      new AlertDialog.Builder(ActivityMain.this) 
      .setMessage("Allow") 
        .setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() { 
        @Override 
         public void onClick(DialogInterface dialog, int which) { 
         ActivityCompat.requestPermissions(ActivityMain.this, 
           new String[]{Manifest.permission.MODIFY_PHONE_STATE}, 
           PERMISSIONS_REQUEST_CODE); 
        } 
       }).setNegativeButton(android.R.string.cancel, null).show(); 
     } else { 
      ActivityCompat.requestPermissions(ActivityMain.this, 
        new String[]{Manifest.permission.MODIFY_PHONE_STATE}, 
        PERMISSIONS_REQUEST_CODE); 
     } 
    } 
} 
    @Override 
public void onRequestPermissionsResult(int requestCode,String permissions[], int[] grantResults) { 
     switch (requestCode) { 
      case PERMISSIONS_REQUEST_CODE: { 
      if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) { 
        Toast.makeText(ActivityMain.this,"permissions granted",Toast.LENGTH_LONG).show(); 
       } else { 
       Toast.makeText(ActivityMain.this,"permissions not granted",Toast.LENGTH_LONG).show(); 
      } 
      return; 
     } 
    } 
} 

답변

2

MODIFY_PHONE_STATE는 시스템 전용 권한입니다. 기본적으로 시스템 & 사용자

시스템 응용있는 당신의 ROM에 사전 설치되어 제공되는 응용 프로그램 :

2 안드로이드 애플 리케이션의 종류가 있습니다. 표준 Android 사용자 환경에서 사용자는/system 파티션에 대한 쓰기 권한이 없으므로 시스템 앱을 직접 설치하거나 제거 할 수 없습니다.

사용자 앱은 Google Play 스토어를 통해 정상적으로 앱을 설치 한 것입니다. 이것들은 안드로이드 폰의 데이터 파티션에 들어가는데, 이는 안드로이드 폰의 일부분으로 사용자 데이터와 앱에 사용 가능합니다.

Android 앱에 시스템 앱으로 앱을 설치하려면 기기가 루팅되었거나 맞춤 복구가 설치되어 있어야합니다 (또는 둘 다).

+0

그러나 API 23 아래에서는 우리 매니페스트 파일에 선언함으로써이 권한을 사용할 수 있습니다. 왜 안드로이드가 API 23에서 사용하도록 허용하지 않는지 –

+0

안드로이드 매니페스트에. 이 권한을 선언하면 오류 메시지가 표시됩니다. 이 사용 권한 및 세부 정보에 액세스 할 수 없다는 메시지가 표시됩니다. 언급 된이 [link] (https://developer.android.com/reference/android/Manifest.permission.html#MODIFY_PHONE_STATE)를 확인하십시오. ** 사용하지 마세요. 타사 응용 프로그램 **. – Sujewan

+0

네, 맞습니다. –

관련 문제