2016-07-18 9 views
2

Ich habe Probleme mit der Implementierung von Laufzeitberechtigungen. Ich ging Link unten durch für die Laufzeitberechtigungen Implementierung.requestPermissions() funktioniert nicht für Manifest.permission.MODIFY_PHONE_STATE in API 23

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

ich vor Problem für android.permission.MODIFY_PHONE_STATE“nur ich habe den Code unten für CAMERA Erlaubnis getestet und Code funktioniert gut für die Kamera Erlaubnis

.

Problem ich bin vor:

  1. shouldShowRequestPermissionRationale() zurückkehrt falsch
  2. requestPermissions() nicht pe Gewährung Entscheidung.

Grad Details: compileSdkVersion 23, buildToolsVersion "23.0.3", targetSdkVersion 23

Manifest Details: Ich habe die folgende Erlaubnis hinzugefügt

verwendet Zulassungs android: name = "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; 
     } 
    } 
} 

Antwort

2

MODIFY_PHONE_STATE ist eine system nur die Erlaubnis, so dass Sie nicht oder diese Berechtigung in der App nutzen zugreifen können.

Es gibt 2 Arten von Android-Apps: System & Benutzer

System-Apps sind im Grunde die Anwendungen, die mit Ihrem ROM vorinstalliert kommen. In einer standardmäßigen Android-Benutzerumgebung hat der Benutzer keinen Schreibzugriff auf die/system-Partition und somit ist es nicht möglich, System-Apps direkt zu installieren oder zu deinstallieren.

Benutzer-Apps sind nur all Ihre normalen App-Installationen über den Google Play Store. Diese gehen in die Datenpartition Ihres Android-Telefons, das den für Benutzerdaten und Apps zur Verfügung gestellten Teil des internen Speichers darstellt.

Um eine App als System-App auf Ihrem Android-Gerät zu installieren, muss Ihr Gerät entweder gerootet sein oder eine benutzerdefinierte Wiederherstellung installiert haben (oder beides).

+0

Aber unter API 23 können wir diese Erlaubnis verwenden, indem Sie einfach in unserer Manifest-Datei so erklären, warum Android uns nicht erlaubt, in API 23 –

+0

In AndroidManifest zu verwenden. Wenn Sie diese Berechtigung deklarieren, können Sie die Fehlermeldung dazu anzeigen. Es wird beschrieben, dass Sie nicht auf diese Erlaubnis und weitere Details zugreifen können Überprüfen Sie diese [link] (https://developer.android.com/reference/android/Manifest.permission.html#MODIFY_PHONE_STATE) erwähnt, ** Nicht zur Verwendung durch Anwendungen von Drittanbietern **. – Sujewan

+0

Ja, Sie haben Recht. –