2016-10-24 5 views
1

In meiner onCreate() Methode zeige ich einen Toast, der ausgeführt wird, bevor das Berechtigungsauswahldialogfeld angezeigt wird, obwohl ich zuerst um Erlaubnis rufe. Warum erscheint der Toast zuerst? Warum wird Code nach Laufzeitberechtigungsaufruf zuerst ausgeführt?

@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(); 




} 

Antwort

3

Die requestPermissions Methode rufen Sie asynchron ausgeführt wird, so dass, sobald der Anruf zu einem neuen Thread geht und es kehrt zum Haupt ein, kann der Toast vor dem Dialogfeld angezeigt. Es hängt einfach davon ab, wie viel Arbeit im Hintergrund erledigt wird und welcher Thread schneller ist.

Weitere Informationen über Berechtigungen und dem asynchronen Teil, überprüfen Sie die hier docs: https://developer.android.com/training/permissions/requesting.html#perm-request

Diese Methode funktioniert asynchron: es sofort zurück, und nachdem der Benutzer auf das Dialogfeld reagiert, ruft das System die App Callback-Methode mit den Ergebnissen, die gleiche Anforderungscode, die die App an requestPermissions() übergeben.

Verwandte Themen