Vóór de M-release was het Android-toestemmingsmodel een alles-of-niets-beslissing voor gebruikers tijdens de installatie. Dit betekende dat als een gebruiker een app wilde gebruiken, deze eerst elke toestemming in de toepassing moest accepteren of ervoor moest kiezen deze helemaal niet te installeren. Dit leidde ertoe dat veel ontwikkelaars hun app-installaties verloren, een vertrouwensrelatie tussen gebruikers en ontwikkelaars en andere privacykwesties.
In het nieuwe toestemmingsmodel kunnen gebruikers machtigingen tijdens runtime goedkeuren als ze nodig zijn en kunnen ze die machtigingen op elk moment weigeren. In dit artikel leert u hoe deze wijziging in de afhandeling van machtigingen van invloed is op u als ontwikkelaar en hoe uw gebruikers uw toepassingen zullen ervaren.
Opgemerkt moet worden dat dit artikel is geschreven voor de officiële release van Android M, dus sommige informatie kan veranderen met de officiële release.
Hoewel Android M nog steeds toestemmingen vereist om te worden gedeclareerd AndroidManifest.xml, gebruikers moeten nu het gebruik van die toestemming tijdens runtime goedkeuren of weigeren. Een belangrijke verandering in de nieuwe versie van Android is dat android.permission.INTERNET
en android.permission.WRITE_EXTERNAL_STORAGE
zijn gedowngraded van een beoordeling van gevaarlijk naar normaal. Dit betekent dat u de gebruiker niet hoeft te vragen vóór gebruik.
Bij het aanvragen van goedkeuring van de toestemming, zal de gebruiker worden gevraagd op basis van de groep van de toestemming, in plaats van dat hij wordt gevraagd om elke afzonderlijke toestemming binnen een groep goed te keuren. Dit betekent dat als uw toepassing zowel SMS-berichten moet verzenden en ontvangen, uw gebruiker alleen zal worden gevraagd om de SMS-toestemmingsgroep goed te keuren. Hieronder staat een lijst met de momenteel ondersteunde machtigingsgroepen in Android M Developer Preview 2 zoals te zien in de systeeminstellingen.
Het moet ook worden opgemerkt dat Android een robuuste heeft voornemen
systeem, waarmee ontwikkelaars gegevens van andere applicaties kunnen opvragen. In plaats van de camera toestemming te moeten vragen en een toepassing te ontwikkelen die de Camera API's helemaal opnieuw gebruikt, kunt u de gebruiker vragen om een foto te maken met een reeds vertrouwde cameratoepassing om een afbeelding in uw app te krijgen. De rechten met betrekking tot de camera worden afgehandeld door de camera-app.
Wanneer u een functie moet gebruiken die toestemming vereist, is er een algemene stroom van gebeurtenissen die zal plaatsvinden. U moet eerst controleren of die toestemming al is goedgekeurd door uw gebruiker.
Als de gebruiker de toestemming niet heeft goedgekeurd, kunt u deze een dialoogvenster voor machtigingsverzoeken aanbieden. De eerste keer dat u dit aan de gebruiker presenteert, moet deze de toestemming weigeren of goedkeuren.
Als ze de toestemming echter eerder hebben geweigerd en opnieuw worden gevraagd, hebben ze de mogelijkheid om niet opnieuw te worden gevraagd om toestemming voor die toestemming..
U kunt controleren of een toestemming eerder is verleend door te bellen checkSelfPermission
voordat u een functie gebruikt waarvoor die toestemming vereist is. Deze methode retourneert een int
waarde gebaseerd op de vraag of toestemming is verleend of niet.
Als het gelijk is aan PackageManager.PERMISSION_GRANTED
, dan kun je doorgaan zoals verwacht. Als die toestemming echter niet eerder is verleend, kunt u dit aanvragen requestPermissions
, het doorgeven van een reeks toestemmingsstrings en een aangepast int
vraag code aan om de logische stroom van uw app bij te houden.
int hasLocationPermission = checkSelfPermission (Manifest.permission.ACCESS_FINE_LOCATION); int hasSMSPermission = checkSelfPermission (Manifest.permission.SEND_SMS); Lijstrechten = nieuwe ArrayList (); if (hasLocationPermission! = PackageManager.PERMISSION_GRANTED) permissions.add (Manifest.permission.ACCESS_FINE_LOCATION); if (hasSMSPermission! = PackageManager.PERMISSION_GRANTED) permissions.add (Manifest.permission.SEND_SMS); if (! permissions.isEmpty ()) requestPermissions (permissions.toArray (new String [permissions.size ()]), REQUEST_CODE_SOME_FEATURES_PERMISSIONS);
Een keer requestPermissions
wordt aangeroepen, krijgt de gebruiker een dialoogvenster voor elke toestemmingsgroep waarvoor uw toepassing toestemming vraagt. Het is het beste om alleen toestemming aan te vragen voor zover nodig, in plaats van in bulk wanneer uw gebruiker voor het eerst uw toepassing start.
Wanneer uw gebruiker klaar is met de dialoogvensters, onRequestPermissionsResult
wordt gebeld en is toegankelijk in uw Activiteit
. Hier start u uw functie of verwerkt u de situatie dat uw gebruiker een of meer machtigingen heeft geweigerd.
Een voorbeeld van hoe te controleren of een toestemming is verleend of geweigerd, wordt hieronder weergegeven. Als de gebruiker de vereiste rechten voor uw functie heeft geweigerd, moet u die functie uitschakelen en de gebruiker laten weten waarom deze functie niet werkt in uw toepassing.
@Override public void onRequestPermissionsResult (int requestCode, String [] permissies, int [] grantResults) switch (requestCode) case 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);
Hoewel apps die zijn ontwikkeld met targeting op Android M vereist zijn om de nieuwe permissiedialogen en -methoden te implementeren, zullen apps die zijn gebouwd voor eerdere versies van Android gebruikers nog steeds een lijst van rechten tijdens de installatie presenteren. Hoewel machtigingen worden geaccepteerd voordat gebruikers uw app kunnen gebruiken, kunnen ze op elk gewenst moment worden ingetrokken.
Aangezien de infrastructuur voor het afhandelen van ingetrokken machtigingen niet beschikbaar is in toepassingen die minder dan Android M targeten, zullen alle functies waarvoor vereiste machtigingen zouden zijn, terugkeren nul
, 0
, of een lege waarde wanneer machtigingen niet worden verleend. Dit kan leiden tot onverwacht gedrag in apps. Het wordt daarom aanbevolen dat ontwikkelaars zich voorbereiden om hun apps te upgraden om zo snel mogelijk het nieuwe Android M-toestemmingsmodel te ondersteunen..
In dit artikel hebt u geleerd over het nieuwe Android M-toestemmingsmodel en hoe u bijgewerkte machtigingen in uw toepassingen kunt ondersteunen. We hebben ook besproken hoe apps reageren op de nieuwe versie van Android wanneer ze zijn gemaakt voor eerdere versies. Met behulp van deze informatie zou u in staat moeten zijn om uw applicaties klaar te maken voor de officiële release van de volgende update voor Android.