2016-10-24 2 views
1

Dans ma méthode onCreate(), je montre un Toast qui s'exécute avant que la boîte de dialogue de sélection d'autorisation n'apparaisse, même si j'appelle d'abord l'autorisation. Pourquoi le pain grillé apparaît-il en premier?Pourquoi le code après l'appel d'autorisation d'exécution est-il exécuté en premier?

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE); 

    provider = locationManager.getBestProvider(new Criteria(), false); 


    if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) 
    { 

     if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { 
      requestPermissions(new String[]{Manifest.permission.ACCESS_FINE_LOCATION, Manifest.permission.ACCESS_COARSE_LOCATION}, MY_PERMISSIONS_REQUEST_CODE); 
     } 


    } 

    Toast.makeText(MainActivity.this, "oncreate", Toast.LENGTH_SHORT).show(); 




} 

Répondre

3

La méthode requestPermissions vous appelez court de manière asynchrone, donc une fois que cet appel va à un nouveau thread et il revient au principal, le Toast peut apparaître avant la boîte de dialogue. Cela dépend simplement de la quantité de travail en arrière-plan et du fil qui est le plus rapide.

Pour plus d'informations sur les autorisations et la partie asynchrone, consultez la documentation ici: https://developer.android.com/training/permissions/requesting.html#perm-request

Cette méthode de manière asynchrone fonctions: elle retourne tout de suite, et après répond à l'utilisateur de la boîte de dialogue, le système appelle la méthode de rappel de l'application avec les résultats, en passant le même code de demande que l'application transmise à requestPermissions().