maronews site d'actualité web et astuce

Breaking

samedi 19 mars 2016

Android 6 Marshmallow (API 23) - Gestion des Permissions



Si vous avez développez une application Android pour une version antérieure à Marshmallow (6 - API 23), vous avez dû vous confronter à la problématique des permissions en tout genre (localisation GPS, Camera, Stockage...).

Comme vous le savez certainement les permissions avant Android Marshmallow été déclarées dans le fichier XML AndroidManifest.xml et l'utilisateur devait valider ou pas ces permissions lors de l'installation de l'application.

Prenons par exemple une permission classique pour utiliser la Camera :

<uses-permission android:name="android.permission.CAMERA" />

Si vous ciblez une version antérieure à Marshmallow, votre application marchera sans aucun soucis, par contre la nouvelle version d'android exige la vérification à l’exécution et non pas lors de l'installation, mais cela dépend aussi du type des permissions (normales ou dangereuses, je vous laisse lire tranquillement la doc des permissions pour bien comprendre la différence).
  
En bref, vous devez maintenant demander à l'utilisateur la permission d'utiliser par exemple la Camera que lorsque vous en avez vraiment besoin, une pop-up s'affichera pour que l'utilisateur valide ou pas votre action et vous devez ensuite gérer l'accord ou le refus de cette demande. On sent ici que Google a voulu appliquer la même pratique qu'Apple et ils ont bien raison.
  
Passons maintenant au code, prenons par exemple une activité qui nécessite l'accès à la caméra, comme j'ai dit bien avant si vous ciblez une version antérieure à l'API 23 vous n'avez qu'a déclarer vos permissions dans l'AndroidManifest.XML et c'est terminé. Par contre maintenant on doit gérer cela différemment.

Exemple :

public class CameraActivity extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
   super.onCreate(savedInstanceState);
   setContentView(R.layout.activity_camera); // Layout de notre activité
   requestPermissions(); // Demande de de la permission d'utiliser la Camera
}

protected void requestPermissions(){
    if (ContextCompat.checkSelfPermission(this, Manifest.permission.CAMERA) != 
        PackageManager.PERMISSION_GRANTED)

        ActivityCompat.requestPermissions(this,
                                          new String[]{Manifest.permission.CAMERA},
                                          PERMISSION_CAMERA);
    else
      onPermissionsGranted();
}

@Override
public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) {
 if (requestCode == PERMISSION_CAMERA) {
  if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED)
     onPermissionsGranted();
  else
     onPermissionDenied();
 }
}

protected void onPermissionsGranted(){
    Log.e(TAG, "Yaaay !!! Permission Granted");
    // ici vous avez accès à la camera :D Cool !!
}

protected void onPermissionDenied(){
    Toast.makeText(this, "I can't take pictures without your permission :(", Toast.LENGTH_LONG).show();
    // ici l'utilisateur a refusé votre demande :(
}

private static final int PERMISSION_CAMERA = 1;
private static final String TAG = CameraActivity.class.getSimpleName();

}


Ceci est juste un article informatif pour que vous mettez vos applications à jour, il ne s'agit ni 
d'un cours ni d'un programme fonctionnel, pour plus d'information sur les nouvelles permissions d'Android Marshmallow vous pouvez visiter la documentation officielle.

Aucun commentaire:

Enregistrer un commentaire