Innan M-utgåvan har Android-behörighetsmodellen varit ett helt eller inget beslut för användarna vid installationstiden. Detta innebar att om en användare ville använda en app måste de först acceptera alla tillstånd som ingår i programmet eller välja att inte installera det alls. Detta ledde till att många utvecklare förlorade på appinstallationer, ett förtroende kopplar mellan användare och utvecklare och andra integritetsproblem.
Under den nya behörighetsmodellen kan användarna godkänna behörigheter vid körning som de behövs och kan neka dessa behörigheter när som helst. I den här artikeln kommer du att lära dig hur denna ändring i hanteringsbehörigheter påverkar dig som utvecklare och hur dina användare kommer att uppleva dina program.
Det bör noteras att den här artikeln skrevs före den officiella utgåvan av Android M, så vissa uppgifter kan ändras med den officiella utgåvan.
Medan Android M fortfarande kräver att behörigheter ska deklareras AndroidManifest.xml, Användare kommer nu att behöva godkänna eller neka användningen av det tillståndet vid körning. En viktig förändring i den nya versionen av Android är det android.permission.INTERNET
och android.permission.WRITE_EXTERNAL_STORAGE
har nedgraderats från en rating av farlig till vanligt. Det betyder att du inte behöver fråga användaren före användning.
När du begär tillståndstillstånd kommer användaren att uppmanas baserat på tillståndsgruppens grupp, istället för att bli ombedd att godkänna varje enskilt tillstånd inom en grupp. Detta innebär att om din ansökan behöver både skicka och ta emot sms-meddelanden, kommer din användare bara att uppmanas att godkänna SMS-tillståndsgruppen. Nedan visas en lista över de tillståndsgrupper som för närvarande stöds i Android M Developer Preview 2, sett från systeminställningarna.
Det bör också noteras att Android är robust Avsikt
system som tillåter utvecklare att begära data från andra applikationer. I stället för att behöva begära kameratillståndet och utveckla en applikation som använder kameraprogram från början, kan du begära att användaren tar en bild med ett redan betrodd kamerans program för att få en bild i din app. Tillstånden som involverar kameran kommer att hanteras av kameraprogrammet.
När du behöver använda en funktion som kräver ett tillstånd finns det ett generellt flöde av händelser som kommer att hända. Du måste först se om det tillståndet redan har godkänts av din användare.
Om användaren inte har godkänt tillståndet kan du presentera dem med en begäran om tillståndsförfrågan. Första gången du presenterar detta för användaren måste de antingen neka eller godkänna tillståndet.
Men om de tidigare har nekat tillståndet och frågas igen, kommer de att ha möjlighet att välja bort att någonsin bli ombedd för tillståndet igen.
Du kan kontrollera om ett tillstånd har beviljats tidigare genom att ringa checkSelfPermission
innan du använder en funktion som kräver det tillståndet. Denna metod returnerar en int
värde baserat på om tillståndet beviljas eller inte.
Om det är lika med PackageManager.PERMISSION_GRANTED
, då kan du fortsätta som förväntat. Om det tillståndet inte har beviljats tidigare kan du begära det med requestPermissions
, passerar i en rad behörighetssträngar och en anpassning int
begäran kod för att hålla reda på din apps logikflöde.
int hasLocationPermission = checkSelfPermission (Manifest.permission.ACCESS_FINE_LOCATION); int hasSMSPermission = checkSelfPermission (Manifest.permission.SEND_SMS); Listabehörigheter = ny ArrayList (); om (hasLocationPermission! = PackageManager.PERMISSION_GRANTED) permissions.add (Manifest.permission.ACCESS_FINE_LOCATION); om (hasSMSPermission! = PackageManager.PERMISSION_GRANTED) permissions.add (Manifest.permission.SEND_SMS); om (! permissions.isEmpty ()) requestPermissions (permissions.toArray (new String [permissions.size ()]), REQUEST_CODE_SOME_FEATURES_PERMISSIONS);
En gång requestPermissions
kallas, användaren presenteras med en begäran dialog för varje behörighetsgrupp som din ansökan begär tillstånd för. Det är bästa sättet att bara begära behörigheter efter behov, snarare än i bulk när användaren först börjar din ansökan.
När din användare är klar med dialogrutorna, onRequestPermissionsResult
kallas och kan nås i din Aktivitet
. Här börjar du antingen din funktion eller hantera situationen där din användare har nekat en eller flera behörigheter.
Ett exempel på hur man kontrollerar om ett tillstånd har beviljats eller nekats visas nedan. Om användaren har nekat några nödvändiga behörigheter för din funktion ska du inaktivera den funktionen och låta användaren veta varför den inte fungerar i din ansökan.
@Override public void onRequestPermissionsResult (int requestCode, String [] behörigheter, int [] grantResults) switch (requestCode) fall REQUEST_CODE_SOME_FEATURES_PERMISSIONS: for (int i = 0; i < permissions.length; i++ ) if( grantResults[i] == PackageManager.PERMISSION_GRANTED ) Log.d( "Permissions", "Permission Granted: " + permissions[i] ); else if( grantResults[i] == PackageManager.PERMISSION_DENIED ) Log.d( "Permissions", "Permission Denied: " + permissions[i] ); break; default: super.onRequestPermissionsResult(requestCode, permissions, grantResults);
Medan appar som är inbyggda med inriktning på Android M krävs för att implementera dialogrutorna och metoderna för nya behörigheter, kommer appar som är byggda för tidigare versioner av Android fortfarande att presentera användare med en lista över behörigheter vid installationstiden. Även om behörigheter godkänns innan användarna kan använda din app kan de ändå återkallas när som helst.
Eftersom infrastrukturen för hantering av återkallade behörigheter inte kommer att vara tillgänglig i program som är inriktade på mindre än Android M, kommer alla funktioner som skulle ha krävt behörigheter att återvända null
, 0
, eller ett tomt värde när behörigheter inte beviljas. Detta kan leda till oväntat beteende i appar, så det rekommenderas att utvecklare förbereder sig för att uppgradera sina appar för att stödja den nya Android M-tillståndsmodellen så snart som möjligt.
I den här artikeln har du lärt dig om den nya Android M-tillståndsmodellen och hur du stöder uppdaterade behörigheter i dina program. Vi har också täckt hur appar ska svara på den nya versionen av Android när de har byggts för tidigare versioner. Med hjälp av denna information borde du kunna få dina program redo för den officiella utgåvan av nästa uppdatering till Android.