2015-10-21 7 views
20

Angenommen, ich eine Erlaubnis zur Laufzeit wie folgt anfordern:Wie kann ich den Berechtigungsdialog in Android anpassen?

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

Android-System erstellt ein Popup-Dialog Erlaubnis zu beantragen. Wie kann ich ein benutzerdefiniertes Layout für diesen Dialog definieren?

+1

Sie können nicht, siehe http://StackOverflow.com/Questions/32097218/android-m-custom -permission-dialog-style –

Antwort

35

Die kurze Antwort ist, können Sie nicht.

Als android Dokumentation setzt:

Wenn Ihre App requestPermissions() aufruft, zeigt das System eine Standard-Dialogfeld für den Benutzer. Ihre App kann nicht dieses Dialogfeld konfigurieren oder ändern. Wenn Sie dem Benutzer Informationen oder Erläuterungen zur Verfügung stellen müssen, sollten Sie dies tun, bevor Sie requestPermissions() aufrufen, wie in "Erklärung, warum die App Berechtigungen benötigt" beschrieben.

So, es gibt keine Möglichkeit, ein benutzerdefiniertes Layout für den Erlaubnisdialog für jetzt zu definieren.

Weiterführende Informationen finden Sie hier: http://developer.android.com/training/permissions/requesting.html

+1

"android ... erlaubt es Ihnen, einen Text zu diesem Dialog hinzuzufügen, der den Benutzer erklärt, warum Sie diese Erlaubnis anfordern" - nicht, dass ich davon weiß. – CommonsWare

+0

@CommonsWare Ich dachte, der Entwickler könnte die Gründe für die Verwendung dieser Erlaubnis erklären, ist das falsch? oder nur Android zeigt seine Standard Erklärung über diese Erlaubnis? – yrazlik

+2

Sie können über 'sollteShowPermissionRequestRationale()' herausfinden, ob Sie eine Erklärung anzeigen möchten. Sie müssen dies jedoch in Ihrer eigenen Benutzeroberfläche tun. Sie können dem Systemdialog dafür keine Prosa hinzufügen. – CommonsWare

9

ich benutzerdefinierte Dialog erstellen müssen für die Erlaubnis:

if (ContextCompat.checkSelfPermission(context, Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) { 
    if (ActivityCompat.shouldShowRequestPermissionRationale((Activity) context, Manifest.permission.READ_EXTERNAL_STORAGE)) { 
     AlertDialog.Builder alertBuilder = new AlertDialog.Builder(context); 
     alertBuilder.setCancelable(true); 
     alertBuilder.setTitle("Permission necessary"); 
     alertBuilder.setMessage("External storage permission is necessary"); 
     alertBuilder.setPositiveButton(android.R.string.yes, new DialogInterface.OnClickListener() { 

     @TargetApi(Build.VERSION_CODES.JELLY_BEAN) 
     public void onClick(DialogInterface dialog, int which) { 
      ActivityCompat.requestPermissions((Activity) context, new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, MY_PERMISSIONS_REQUEST_READ_EXTERNAL_STORAGE);}}); 

     AlertDialog alert = alertBuilder.create(); 
     alert.show(); 
    } else { 
      ActivityCompat.requestPermissions((Activity) context, new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, MY_PERMISSIONS_REQUEST_READ_EXTERNAL_STORAGE);} 
    return false;} 
else { 
    return true; 
} 

Hoffnung das wird Ihnen helfen :)

Verwandte Themen