2015-08-22 3 views
8

Mit offiziellen AVD rev. 3Android 6 Marshmallow: Anfragen für bestimmte Berechtigungen werden sofort abgelehnt, ohne dass ui angezeigt wird

Aufruf dieser:

ActivityCompat.requestPermissions(activity, new String[]{"android.permission.USE_CREDENTIALS"}, REQUEST_PERMISSION_CREDENTIALS); 

Brände sofort:

onRequestPermissionsResult (int requestCode, String[] permissions, int[] grantResults) 

Und resultierende Code ist PackageManager.PERMISSION_DENIED

Wer ein Update hat?

UPDATE: bekannt betroffen sein:

Manifest.permission.CHANGE_NETWORK_STATE 
Manifest.permission.WRITE_SETTINGS (solved, see Sam's answer) 
android.permission.USE_CREDENTIALS (solved, read Update 2) 
READ_SMS 

UPDATE 2: Siehe ausgezeichnete akzeptierte Antwort. Im Wesentlichen ist USE_CREDENTIALS jetzt eine sichere Erlaubnis. Beats me warum sdk nicht einfach PERMISSION_GRANTED für es zurückgeben ...

+0

Haben Sie den Dialog gesehen? –

+3

Haben Sie die Berechtigung im Manifest definiert? – yoah

+1

@DeividiCavarzan kein Dialog. onResult heißt sofort – rothschild86

Antwort

6

Siehe diese Seiten: permissions by protection level und protection level definitions.

Manifest.permission.CHANGE_NETWORK_STATE

Manifest.permission.WRITE_SETTINGS

Diese fallen unter den Schutzniveau "Signatur | appop | pre23 | vorinstallierter", die, dass nur gleich Signatur-Anwendungen bedeutet (System signiert), App-Operatoren, Apps, die unter API-Level 23 zielgerichtet sind, und vorinstallierte Apps können diese haben.

android.permission.USE_CREDENTIALS

Diese nur auf API-Ebene 22 und unten erforderlich ist. Siehe this.

Auch sollten Sie die überprüfen.

+0

ah, ausgezeichnete Info. Danke! – rothschild86

+1

Es scheint, dass WRITE_SETTINGS mit dem speziellen Menü unter "Apps" auf Android M gewährt werden kann. Wenn das App-Ziel <23 die Berechtigung standardmäßig gewährt wird, wird die Berechtigung standardmäßig gewährt, wenn das App-Ziel> = 23 ist. Das Problem ist, dass mit diesen Berechtigungen die checkSelfPermissions & co. scheint nicht zu funktionieren. – greywolf82

+0

Ich denke, es ist da, um dem Benutzer zu erlauben, diese Erlaubnis von Pre-23-Apps zu widerrufen. Da Sie nicht über die API darauf zugreifen können, spielt es keine Rolle, ob Sie es im Einstellungsmenü gewähren können. –

1

Scheint, wie du hast es sortiert. Ich hatte das gleiche Symptom mit einer närrischeren Ursache.

Ich hatte meine Verwendung-Berechtigung Knoten INSIDE meine Anwendung Knoten in meinem Manifest. Dies schien bei 22 oder weniger zu funktionieren, aber das Verschieben auf 23 schien es nicht zu erkennen und somit automatisch die Erlaubnis zu verweigern.

Hoffentlich hilft dies jemand anderen auf diesem fest.

0

erste Prüfung für Marsh Version dann diese in Ihren Code einfügen, nachdem die Aktivität Namen

if (!android.provider.Settings.System.canWrite(RingdroidEditActivity.this)) { 
        Intent intentt = new  Intent(android.provider.Settings.ACTION_MANAGE_WRITE_SETTINGS); 
       intentt.setData(Uri.parse("package:" + RingdroidEditActivity.this.getPackageName())); 
       intentt.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
       startActivity(intentt); 
      } 

Ändern Sie werden auf die Erlaubnis Seite der App übernehmen und den Benutzer um Erlaubnis fragen

WRITE_SETTINGS geben nachdem marshmellow geändert wurde funktioniert das um das Beispiel zu sehen diese Anwendung überprüfen