App-machtigingen begrijpen | CodePath Android Cliffnotes (2023)

Overzicht

Een Android-app start standaard met nul machtigingen. Wanneer de app een van de beveiligde functies van het apparaat moet gebruiken (netwerkverzoeken verzenden, toegang krijgen tot de camera, een sms verzenden, enz.), moet de app daarvoor de juiste toestemming van de gebruiker krijgen.

Vóór Marshmallow werden machtigingen tijdens de installatie afgehandeld en gespecificeerd in deAndroidManifest.xmlbinnen het project. De volledige lijst met machtigingen kan zijnhier gevonden. Na Marshmallow moeten nu machtigingen zijngevraagd tijdens runtimevoordat het wordt gebruikt. Er zijn eenaantal beschikbare bibliothekenom runtime-machtigingen gemakkelijker te maken. Als je snel aan de slag wilt, bekijk dan onze gids opruntimerechten beheren met PermissionsDispatcher.

Machtigingen vóór Marshmallow

Machtigingen waren veel eenvoudiger vóór Marshmallow (API 23). Alle machtigingen werden tijdens de installatie afgehandeld. Wanneer een gebruiker een app ging installeren vanuit deGoogle Play Store, kreeg de gebruiker een lijst met machtigingen te zien die de app nodig had (sommige mensen noemden dit een "muur van machtigingen". De gebruiker kon ofwel accepterenallede machtigingen en ga door met het installeren van de app of besluit de app niet te installeren. Het was een alles of niets benadering. Er was geen manier om alleen bepaalde machtigingen aan de app te verlenen en de gebruiker kon op geen enkele manier bepaalde machtigingen intrekken nadat de app was geïnstalleerd.

Voorbeeld van pre-Marshmallow-rechten aangevraagd door de Dropbox-app:

App-machtigingen begrijpen | CodePath Android Cliffnotes (1)

Voor een app-ontwikkelaar waren machtigingen heel eenvoudig. Aanvrageneen van de vele machtigingen, specificeer het gewoon in deAndroidManifest.xml:

Een toepassing die bijvoorbeeld de contacten van de gebruiker moet lezen, zou het volgende toevoegenAndroidManifest.xml:

 xmlns:android="http://schemas.android.com/apk/res/android" pakket="com.android.app.mijnapp" >  android:naam="android.toestemming.READ_CONTACTS" />...

Meer was er niet. De gebruiker kon de machtigingen niet wijzigen, zelfs niet na installatie van de app. Dit maakte het voor ontwikkelaars gemakkelijk om met machtigingen om te gaan, maar het was niet de beste gebruikerservaring.

Toestemmingsupdates in Marshmallow

Marshmallow bracht grote veranderingen in het toestemmingsmodel. Het introduceerde het concept van runtimerechten. Dit zijn machtigingen die worden aangevraagd terwijl de app actief is (in plaats van voordat de app wordt geïnstalleerd). Deze toestemming kan vervolgens door de gebruiker worden toegestaan ​​of geweigerd. Voor goedgekeurde machtigingen kunnen deze ook op een later tijdstip worden ingetrokken.

Dit betekent dat er nog een aantal dingen zijn waarmee u rekening moet houden bij het werken met machtigingen voor eenHeemstapp. Houd er rekening mee dat uwdoelSdkVersionmoet >= zijn23en op uw emulator / apparaat moet Marshmallow draaien om het nieuwe machtigingsmodel te zien. Als dit niet het geval is, zie dan deachterwaartse compatibiliteitsectie om te begrijpen hoe machtigingen zich gedragen in uw configuratie.

Normale machtigingen

Als u een nieuwe machtiging moet toevoegen, vinkt u dit eerst aandeze paginaom te zien of de toestemming wordt beschouwd als eenBESCHERMING_NORMAALtoestemming. In Marshmallow heeft Google bepaalde machtigingen aangemerkt als "veilig" en deze "Normale machtigingen" genoemd. Dit zijn dingen alsACCESS_NETWORK_STATE,INTERNET, etc. wat niet veel kwaad kan. Normale machtigingen worden automatisch verleend tijdens de installatie ennooitvraag de gebruiker om toestemming.

Belangrijk:Normale machtigingen moeten worden toegevoegd aan hetAndroidmanifest:

 xmlns:android="http://schemas.android.com/apk/res/android" pakket="com.android.app.mijnapp" >  android:naam="android.toestemming.INTERNET" />...

Runtime-machtigingen

Als de machtiging die u moet toevoegen niet wordt vermeld onder de normale machtigingen, moet u omgaan met "Runtime-machtigingen". Runtime-machtigingen zijn machtigingen die worden aangevraagd terwijl ze nodig zijn terwijl de app actief is. Deze machtigingen tonen een dialoogvenster voor de gebruiker, vergelijkbaar met het volgende:

App-machtigingen begrijpen | CodePath Android Cliffnotes (2)

De eerste stap bij het toevoegen van een "Runtime Permission" is om deze toe te voegen aan hetAndroidmanifest:

 xmlns:android="http://schemas.android.com/apk/res/android" pakket="com.codepath.androidpermissionsdemo" >  android:naam="android.toestemming.READ_CONTACTS" />...

Vervolgens moet u het toestemmingsverzoek starten en het resultaat afhandelen. De volgende code laat zien hoe u dit doet in de context van eenActiviteit, maar dit kan ook vanuit eenFragment.

// MainActivity.javaopenbaar klas Hoofdactiviteit strekt zich uit AppCompatActiviteit { @Overschrijven beschermd leegte opCreate(Bundel opgeslagenInstanceState) { super.opCreate(opgeslagenInstanceState); setContentView(R.indeling.activiteit_main); // In een echte app zou je toestemming willen vragen wanneer de gebruiker een actie uitvoert // dat vereist die toestemming. getPermissionToReadUserContacts(); } // Identificatie voor het toestemmingsverzoek privaat statisch laatste int LEES_CONTACTS_PERMISSIONS_REQUEST = 1; // Wordt aangeroepen wanneer de gebruiker een actie uitvoert waarvoor de app het // contacten van de gebruiker openbaar leegte getPermissionToReadUserContacts() { // 1) Gebruik de ondersteuningsbibliotheekversie ContextCompat.checkSelfPermission(...) om te vermijden // de buildversie controleren aangezien Context.checkSelfPermission(...) alleen beschikbaar is // in Heemst // 2) Controleer altijd op toestemming (ook als er al toestemming is verleend) // aangezien de gebruiker op elk moment machtigingen kan intrekken via Instellingen als (ContextCompat.checkSelfPermission(dit, Manifest.toestemming.LEES_CONTACTS) != Pakket manager.TOESTEMMING VERLEEND) { // De toestemming is nog NIET verleend. // Controleer of de gebruiker al naar deze toestemming is gevraagd en geweigerd // Het. Dan willen we graag meer uitleg geven over waarom de toestemming nodig is. als (shouldShowRequestPermissionRationale( Manifest.toestemming.LEES_CONTACTS)) { // Toon onze eigen gebruikersinterface om de gebruiker uit te leggen waarom we de contacten moeten lezen // voordat u daadwerkelijk om toestemming vraagt ​​en de standaard gebruikersinterface laat zien } // Activeer een asynchroon verzoek om daadwerkelijk toestemming te krijgen // Dit toont de standaard gebruikersinterface voor toestemmingsverzoeken requestPermissies(nieuw Snaar[]{Manifest.toestemming.LEES_CONTACTS}, LEES_CONTACTS_PERMISSIONS_REQUEST); } } // Terugbellen met het verzoek van aanroepende requestPermissions(...) @Overschrijven openbaar leegte onRequestPermissionsResult(int Verzoek code, @NonNull Snaar rechten[], @NonNull int[] subsidieResultaten) { // Zorg ervoor dat dit ons oorspronkelijke READ_CONTACTS-verzoek is als (Verzoek code == LEES_CONTACTS_PERMISSIONS_REQUEST) { als (subsidieResultaten.lengte == 1 && subsidieResultaten[0] == Pakket manager.TOESTEMMING VERLEEND) { Geroosterd brood.maakText(dit, "Toestemming Contacten lezen verleend", Geroosterd brood.LENGTH_SHORT).show(); } anders { // showRationale = false als gebruiker klikt op Nooit meer vragen, anders waar booleaans laten zienRationale = shouldShowRequestPermissionRationale( dit, Manifest.toestemming.LEES_CONTACTS); als (laten zienRationale) { // doe hier iets om de gedegradeerde modus aan te pakken } anders { Geroosterd brood.maakText(dit, "Toestemming Contacten lezen geweigerd", Geroosterd brood.LENGTH_SHORT).show(); } } } anders { super.onRequestPermissionsResult(Verzoek code, rechten, subsidieResultaten); } }}

Machtigingsgroepen

Machtigingsgroepenvermijdt het spammen van de gebruiker met veel toestemmingsverzoeken, terwijl de app-ontwikkelaar alleen het minimale aantal toestemmingen kan vragen dat op enig moment nodig is.

Gerelateerde machtigingen zijn gegroepeerd ineen van de toestemmingsgroepen. Wanneer een app toestemming vraagt ​​die bij een bepaalde machtigingsgroep hoort (d.w.z.LEES_CONTACTS), vraagt ​​Android de gebruiker in plaats daarvan naar de groep op een hoger niveau (CONTACTEN). Op deze manier wanneer de app later het nodig heeftWRITE_CONTACTStoestemming, kan Android dit automatisch zelf verlenen zonder de gebruiker te vragen.

Bij de meeste van uw interactie met de machtigings-API's werkt u met de individuele machtigingen en niet met de machtigingsgroepen, maar let goed op wat de API verwacht, aangezien zowel machtigingen als machtigingsgroepen Strings zijn.

Achterwaartse compatibiliteit

Er zijn 2 hoofdscenario's om over na te denken als het gaat om achterwaartse compatibiliteit:

  1. Uw app target een API die minder is dan Marshmallow (TargetSdkVersie<23), maar de emulator / het apparaat is Marshmallow:
    • Uw app blijft het oude rechtenmodel gebruiken.
    • Alle machtigingen vermeld in deAndroidmanifestwordt gevraagd tijdens de installatie.
    • Gebruikers kunnen machtigingen intrekken nadat de app is geïnstalleerd. Het is belangrijk om dit scenario te testen, omdat de resultaten van bepaalde acties zonder de juiste toestemming onverwacht kunnen zijn.
  2. De emulator / het apparaat draait iets ouder dan Marshmallow, maar je app richt zich op Marshmallow (TargetSdkVersie>=23):
    • Uw app blijft het oude rechtenmodel gebruiken.
    • Alle machtigingen vermeld in deAndroidmanifestwordt gevraagd tijdens de installatie.

Hoe om toestemming te vragen

Google raadt hierin aanvideodat er vier patronen zijn waarmee rekening moet worden gehouden bij het nadenken over machtigingen:

App-machtigingen begrijpen | CodePath Android Cliffnotes (3)

Elk patroon dicteert een andere manier om machtigingen aan te vragen. Gebruik bijvoorbeeld bij het aanvragen van kritieke maar onduidelijke machtigingen een warm welkomstscherm om te begrijpen dat er om toestemming wordt gevraagd. Voor kritieke machtigingen, zoals een camera-app die cameratoestemming nodig heeft, moet u hier vooraf om vragen. Secundaire functies kunnen later in context worden aangevraagd, zoals een geotagging-app bij het vragen om locatietoestemming. Voor machtigingen die secundair en onduidelijk zijn, moet u een motiveringsverklaring opnemen als u ze echt nodig heeft.

Opslagrechten

Denk er nog eens over na of u lees-/schrijfrechten voor opslag nodig hebt (d.w.z.android.toestemming.WRITE_EXTERNAL_STORAGEofandroid.toestemming.READ_EXTERNAL_STORAGE), waarmee u alle bestanden op de SD-kaart krijgt. In plaats daarvan moet u methoden op Context gebruiken om toegang te krijgen tot pakketspecifieke mappen op externe opslag. Uw app heeft altijd toegang tot lezen/schrijven naar deze mappen, dus er zijn geen machtigingen nodig om dit aan te vragen:

// Applicatiespecifieke aanroep waarvoor geen externe opslagmachtigingen nodig zijn// Kan zijn Omgeving.DIRECTORY_PICTURES, Omgeving.DIRECTORY_PODCASTS, Omgeving.DIRECTORY_RINGTONES,// Omgeving.DIRECTORY_NOTIFICATIONS, Omgeving.DIRECTORY_PICTURES of Omgeving.MOVIESBestand richt = Mijn activiteit.dit.getExternalFilesDir(Omgeving.DIRECTORY_PICTURES);

Machtigingen beheren met behulp van ADB

Machtigingen kunnen ook op de opdrachtregel worden beheerd met behulp vanbijvoeglijk naamwoordmet de volgende commando's.

Toon alle Android-machtigingen:

$adb shell pm-lijstmachtigingen-D -G

Machtigingsstatus van app dumpen:

$bijvoeglijk naamwoordshell dumpsys-pakket com.PackageName.enterprise

Runtime-machtigingen verlenen en intrekken:

$bijvoeglijk naamwoordshell pm subsidie ​​com.PackageName.enterprise some.permission.NAME$bijvoeglijk naamwoordshell pm intrekken com.PackageName.enterprise android.permission.READ_CONTACTS

Een app installeren met alle rechten verleend:

$bijvoeglijk naamwoordinstalleren-GmijnAPP.apk

Referenties

FAQs

Hoe geef je een app toestemming? ›

App-rechten wijzigen
  1. Open de app Instellingen op je apparaat.
  2. Tik op Apps.
  3. Tik op de app die je wilt wijzigen. Als je de app niet kunt vinden, tik je op Alle apps bekijken. ...
  4. Tik op Rechten. ...
  5. Als je een instelling voor rechten wilt wijzigen, tik je erop en kies je Toestaan of Niet toestaan.

Hoe krijg ik een bug uit een app? ›

Stap 1: Opnieuw opstarten en updaten
  1. Je telefoon opnieuw opstarten.
  2. Checken op Android-updates.
  3. App updaten.
  4. De app gedwongen stoppen.
  5. Het cachegeheugen en de gegevens van de app wissen.
  6. De app verwijderen.
  7. Contact opnemen met de app-ontwikkelaar.

Wat is Opslagmachtiging? ›

Vanwege recente wijzigingen in het Android-besturingssysteem dient u de mobiele app van Adobe Acrobat Reader via een machtiging toegang te verlenen tot de bestanden op uw apparaat wanneer u een update uitvoert naar de nieuwste versie van de app vanuit de Google Play Store.

Waarom stoppen apps op telefoon? ›

Dit gebeurt meestal als je wifi of mobiele data langzaam of onstabiel zijn en apps niet goed werken. Een andere oorzaak voor het vastlopen van Android-apps is het gebrek aan opslagruimte op je apparaat.

Wat betekent app rechten geweigerd? ›

Een app stuurt een rechtenverzoek voor het gebruik van functies op je apparaat. Je kunt dit verzoek toestaan of weigeren. Via de instellingen van je apparaat kun je ook de rechten voor één app of alle rechten van een bepaald type wijzigen.

Wat is permission controller? ›

Permission Manager laat je de controle houder over al je apps, de permissies per app instellen en geeft je een simpele en handig overzicht van hetgeen dat op je Android-toestel draait. Fijner kun je het eigenlijk niet hebben.

Hoe kan je zien of je een virus hebt op je telefoon? ›

Hoe merk je dat je een virus hebt?
  1. Het datagebruik schiet omhoog.
  2. Apps crashen vaker dan normaal.
  3. De telefoonrekening van je mobiel abonnement is onverklaarbaar veel hoger dan anders.
  4. Je batterij gaat sneller leeg.
  5. Je telefoon is warmer dan normaal.
Oct 5, 2022

Hoe kun je zien of er een virus op je telefoon zit? ›

Verwijder onnodige, niet-vertrouwde apps of apps die afkomstig zijn van andere bronnen dan de Google Play Store.
  1. Open de app Instellingen. op uw Android-telefoon of -tablet.
  2. Tik op Apps en meldingen. Alle apps bekijken.
  3. Tik op de apps die u wilt verwijderen. Verwijderen.
  4. Volg de instructies op het scherm.

Hoe kan je zien of er een virus op je telefoon zit? ›

Een antivirus-app is de beste manier om virussen en malware automatisch te verwijderen van uw telefoon. Bovendien detecteert deze app schadelijke varianten om toekomstige infecties te voorkomen. Installeer AVG AntiVirus voor Android om uw Android-apparaat in realtime te beschermen tegen malware.

Waarom willen veel apps toegang tot je locatie? ›

Aan de hand van jouw gegevens vergroot de app jouw gebruiksgemak en wordt daarnaast ook bepaald welke advertenties je wel of niet ziet.

Welke apps kan ik verwijderen van mijn Samsung? ›

Systeem-apps of bloatware verwijderen van een Android-telefoon
  1. Open het instellingenmenu van je Android-telefoon.
  2. Druk op 'Applicaties'.
  3. Druk op 'Applicatiebeheer'.
  4. Je ziet nu een lijst met alle apps op je Android-telefoon.
  5. Druk op een app die je wilt uitzetten.
  6. Druk op 'Uitzetten'.
  7. Druk op 'OK'.
Feb 8, 2021

Welke apps hebben toegang tot contacten? ›

Ga op je telefoon naar 'Instellingen' (te herkennen aan het tandwiel-icoontje). Tik door naar 'Apps' en de optie 'App-machtigingen'. Je ziet voor welke apps je rechten hebt verleend. De 'App-machtigingen' voor agenda, camera, contacten, locatie, sms etc.

Waarom stoppen mijn apps Samsung? ›

Crashende apps op je Samsung telefoon? De update van de systeem-app Android System WebView is hoogstwaarschijnlijk de oorzaak geweest. Hierdoor crashen apps direct na het openen en zijn dus in één klap onbruikbaar geworden. Blijkbaar zat er dus een bug (storing) in de update van de app Android System Webview.

Wat betekent Google app is gestopt? ›

Omdat de Google-app diep in het Android-systeem zit verwerkt, blijven de crashmeldingen ook verschijnen als je de applicatie niet gebruikt. Hierdoor krijgen gebruikers continu foutmeldingen te zien bij gebruik van de telefoon.

Hoe zet je toestemming voor apps uit Apple? ›

Op een iPhone, iPad of iPod touch
  1. Open de Instellingen-app.
  2. Tik op uw naam.
  3. Tik op 'Delen met gezin'.
  4. Tik op de naam van het gezinslid en tik vervolgens op 'Vraag om te kopen'. ...
  5. Schakel 'Require Purchase Approval' (Vereis toestemming voor aankopen) in of uit.
Dec 20, 2022

Hoe kun je een app delen met gezin? ›

Aanmelden voor de gezinsbibliotheek
  1. Open de Google Play-app .
  2. Tik rechtsboven op het profielicoon.
  3. Tik op Instellingen Gezin. Aanmelden voor gezinsbibliotheek.
  4. Volg de instructies op het scherm om de gezinsbibliotheek in te stellen.

Hoe ouderlijk toezicht instellen iPhone? ›

Ga naar 'Instellingen' en tik op 'Schermtijd'. Tik op 'Beperkingen' en voer de toegangscode voor 'Schermtijd' in. Tik op 'Beperkingen voor materiaal' en vervolgens op 'Webmateriaal'. Kies 'Onbeperkt', 'Beperk expliciete websites' of 'Toegestane websites'.

Hoe zet je in app aankopen aan? ›

In-app aankopen beveiligen Android-apparaat
  1. Open de app Play Store.
  2. Tik rechtsboven op het rondje met uw initialen of profielfoto.
  3. Tik op Instellingen.
  4. Tik op Verificatie.
  5. Tik op Verificatie vereisen voor aankopen.
  6. Tik op Voor alle Play-aankopen op dit apparaat > Ok.
Jun 8, 2023

Top Articles
Latest Posts
Article information

Author: Frankie Dare

Last Updated: 12/09/2023

Views: 5971

Rating: 4.2 / 5 (53 voted)

Reviews: 84% of readers found this page helpful

Author information

Name: Frankie Dare

Birthday: 2000-01-27

Address: Suite 313 45115 Caridad Freeway, Port Barabaraville, MS 66713

Phone: +3769542039359

Job: Sales Manager

Hobby: Baton twirling, Stand-up comedy, Leather crafting, Rugby, tabletop games, Jigsaw puzzles, Air sports

Introduction: My name is Frankie Dare, I am a funny, beautiful, proud, fair, pleasant, cheerful, enthusiastic person who loves writing and wants to share my knowledge and understanding with you.