Înțelegerea permisiunilor în Android M

Introducere

Înainte de lansarea M, modelul permisiunilor Android a fost o decizie totală sau fără nimic pentru utilizatori la momentul instalării. Acest lucru înseamnă că, dacă un utilizator dorește să utilizeze o aplicație, trebuie mai întâi să accepte toate permisiunile incluse în aplicație sau să aleagă să nu o instaleze deloc. Acest lucru a dus la pierderea numeroaselor dezvoltatori în privința instalărilor de aplicații, a deconectării de încredere între utilizatori și dezvoltatori și a altor probleme de confidențialitate.


În cadrul noului model de permisiuni, utilizatorii vor putea să aprobe permisiunile la timpul de execuție deoarece sunt necesare și pot refuza aceste permisiuni în orice moment. În acest articol, veți afla cum vă va afecta această modificare în permisiunile de gestionare ca dezvoltator și modul în care utilizatorii vă vor experimenta aplicațiile.

Trebuie remarcat faptul că acest articol a fost scris înainte de lansarea oficială a aplicației Android M, deci unele informații se pot schimba odată cu lansarea oficială.

1. Ceea ce necesită permisiuni?

În timp ce Android M necesită în continuare permisiuni de declarare AndroidManifest.xml, utilizatorii vor avea acum obligația de a aproba sau de a refuza utilizarea acestei permisiuni în timpul rulării. O schimbare importantă în noua versiune de Android este aceea android.permission.INTERNET și android.permission.WRITE_EXTERNAL_STORAGE au fost declasate de la un rating de periculos la normal. Aceasta înseamnă că nu trebuie să solicitați utilizatorului înainte de utilizare.

Când se solicită aprobarea permisiunii, utilizatorul va fi solicitat în baza grupului de permisiuni, în loc să fie rugat să aprobe fiecare permisiune din cadrul unui grup. Aceasta înseamnă că, dacă aplicația dvs. trebuie să trimită și să primească mesaje SMS, utilizatorul dvs. va fi invitat să aprobe grupul de permisiuni SMS. Mai jos este o listă a grupurilor de permisiune acceptate în prezent în previzualizarea Android M pentru dezvoltatori 2, după cum se vede din setările de sistem.

Ar trebui de asemenea remarcat faptul că Android are un robust scop sistem, care permite dezvoltatorilor să solicite date din alte aplicații. Mai degrabă decât necesitatea de a solicita permisiunea camerei și de a dezvolta o aplicație care utilizează API-urile camerei foto de la zero, puteți solicita ca utilizatorul să realizeze o fotografie utilizând o aplicație de cameră cu adevărat de încredere pentru a obține o imagine în aplicația dvs. Permisiunile care implică camera vor fi tratate de aplicația camerei.

2. Cum să solicitați permisiunea?

Când trebuie să utilizați o funcție care necesită o permisiune, există un flux general de evenimente care se vor întâmpla. Mai întâi trebuie să vedeți dacă permisiunea a fost deja aprobată de utilizatorul dvs..

Dacă utilizatorul nu a aprobat permisiunea, le puteți prezenta cu un dialog de solicitare de permisiune. La prima prezentare a acestui lucru, utilizatorul va trebui fie să refuze, fie să aprobe permisiunea.

Cu toate acestea, dacă au refuzat anterior permisiunea și li se va cere din nou, vor avea opțiunea de a renunța din nou la solicitarea permisiunii respective.

Puteți verifica dacă o permisiune a fost acordată anterior prin apelare checkSelfPermission înainte de a utiliza o funcție care va necesita această permisiune. Această metodă returnează o int valoare bazată pe faptul că permisiunea este acordată sau nu.

Dacă este egal cu PackageManager.PERMISSION_GRANTED, atunci puteți continua conform așteptărilor. Cu toate acestea, dacă această permisiune nu a fost acordată anterior, puteți să o solicitați requestPermissions, trecând într-o serie de șiruri de permisiuni și un obicei int codul de solicitare pentru urmărirea fluxului logic al aplicației.

int hasLocationPermission = checkSelfPermission (Manifest.permission.ACCESS_FINE_LOCATION); int hasSMSPermission = checkSelfPermission (Manifest.permission.SEND_SMS); Listă permisiuni = noul ArrayList(); dacă (hasLocationPermission! = PackageManager.PERMISSION_GRANTED) permissions.add (Manifest.permission.ACCESS_FINE_LOCATION);  dacă (hasSMSPermission! = PackageManager.PERMISSION_GRANTED) permissions.add (Manifest.permission.SEND_SMS);  dacă ! permissions.isEmpty ()) requestPermissions (permissions.toArray (new String [permissions.size ()]), REQUEST_CODE_SOME_FEATURES_PERMISSIONS); 

O singura data requestPermissions se numește, utilizatorul este prezentat cu un dialog de solicitare pentru fiecare grup de permisiune pentru care cererea dvs. solicită permisiunea. Este cea mai bună practică să cereți permisiuni numai după cum este necesar, mai degrabă decât în ​​vrac atunci când utilizatorul dvs. pornește prima aplicație.

Când utilizatorul dvs. este terminat cu dialogurile, onRequestPermissionsResult este numit și poate fi accesat în Activitate. Aici porniți fie funcția, fie gestionați situația în care utilizatorul dvs. a negat una sau mai multe permisiuni.

Un exemplu de cum să verificați dacă o permisiune a fost acordată sau refuzată este prezentată mai jos. Dacă utilizatorul a refuzat permisiunile necesare pentru caracteristica dvs., trebuie să dezactivați respectiva funcție și să îi lăsați pe utilizator să știe de ce nu funcționează în aplicația dvs..

@Override public void peRequestPermissionsResult (int requestCode, String [] permisiuni, int [] grantResults) comutare (requestCode) caz REQUEST_CODE_SOME_FEATURES_PERMISSIONS: pentru (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);   

3. Aplicații vechi pe Android M

Deși aplicațiile care sunt construite care vizează Android M sunt obligate să implementeze dialogurile și metodele de permisiuni noi, aplicațiile create pentru versiunile anterioare de Android vor prezenta în continuare utilizatorilor o listă de permisiuni la momentul instalării. Deși permisiunile sunt acceptate înainte ca utilizatorii să poată utiliza aplicația dvs., acestea pot fi revocate în orice moment.

Întrucât infrastructura pentru gestionarea permisiunilor revocate nu va fi disponibilă în aplicații care vizează mai puțin decât Android M, toate caracteristicile care ar necesita permisiuni vor reveni nul, 0, sau o valoare goală când permisiunile nu sunt acordate. Acest lucru poate duce la un comportament neașteptat în aplicații, deci este recomandat ca dezvoltatorii să se pregătească pentru a-și actualiza aplicațiile în așa fel încât să accepte noul model de permisiune Android M cât mai curând posibil.

Concluzie

În acest articol, ați aflat despre noul model de permisiune pentru Android M și despre modul în care să sprijiniți permisiunile actualizate în aplicațiile dvs. De asemenea, am analizat modul în care aplicațiile vor răspunde noii versiuni Android atunci când au fost construite pentru versiunile anterioare. Folosind aceste informații, ar trebui să puteți primi aplicațiile pregătite pentru lansarea oficială a următoarei actualizări Android.

Cod