2015-08-22 5 views
8

Korzystanie z oficjalnego AVD rev. 3Android 6 Marshmallow: żądania niektórych konkretnych uprawnień są natychmiast odrzucane bez wyświetlania interfejsu użytkownika

Wywołanie to:

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

Fires natychmiast:

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

i wynikającej kod jest PackageManager.PERMISSION_DENIED

Każdy ma poprawkę?

UPDATE: znane zostać dotknięte:

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: Zobacz doskonałą odpowiedź zaakceptowana. Zasadniczo USE_CREDENTIALS jest teraz bezpiecznym zezwoleniem. Bije mnie, dlaczego nie po prostu zwrócić PERMISSION_GRANTED za to ...

+0

Czy widzisz okno dialogowe? –

+3

Czy masz uprawnienie zdefiniowane w manifeście? – yoah

+1

@DeividiCavarzan bez dialogu. onResult nazywane jest natychmiastowo – rothschild86

Odpowiedz

6

Zobacz te strony: permissions by protection level i protection level definitions.

Manifest.permission.CHANGE_NETWORK_STATE

Manifest.permission.WRITE_SETTINGS

one spaść poniżej poziomu ochrony "podpis | appop | pre23 | preinstalowanym", co oznacza, że ​​tylko aplikacje sam podpis (system zasadniczo podpisany), operatorzy aplikacji, aplikacje, które są poniżej poziomu interfejsu API 23 i które mogą mieć te aplikacje.

android.permission.USE_CREDENTIALS

To jest potrzebne tylko na poziomie 22 i poniżej API. Zobacz this.

Powinieneś również sprawdzić numer .

+0

ah, doskonałe informacje. Dziękuję Ci! – rothschild86

+1

Wygląda na to, że WRITE_SETTINGS można przyznać przy użyciu określonego menu w obszarze "Aplikacje" na Androidzie M. Jeśli cel aplikacji <23 domyślnie przyznano uprawnienia, jeśli docelowa aplikacja ma wartość> = 23, domyślnie uprawnienia nie są przyznawane. Problem polega na tym, że przy takich uprawnieniach checkSelfPermissions & co. wydaje się nie działać. – greywolf82

+0

Wydaje mi się, że istnieje możliwość zezwolenia użytkownikowi na odwołanie tego pozwolenia od aplikacji sprzed 23 lat. Ponieważ nie można uzyskać do niego dostępu za pośrednictwem interfejsu API, nie ma znaczenia, czy można go udzielić w menu ustawień. –

1

Wydaje się, że masz to sortowane. Miałem ten sam objaw z bardziej głupią przyczyną.

Posiadałem moje węzły uprawnień do celów WEWNĄTRZ mojego węzła aplikacji w moim manifeście. Wydawało się, że działa to 22 lub mniej, ale przejście do 23 wydawało się nie rozpoznawać go i tym samym auto zaprzeczyć temu zezwoleniu.

Mam nadzieję, że to pomoże komuś innemu utknąć w tym.

0

najpierw sprawdzić wersję Marshmellow następnie wkleić w kodzie po zmianie nazwy aktywności

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); 
      } 

Spowoduje to przejście do strony zgody aplikacji i poprosić użytkownikowi wyrazić zgodę

WRITE_SETTINGS po zmianie marshmellowa to zadziała , aby zobaczyć przykład sprawdź tę aplikację