2016-10-24 2 views
1

В моем методе onCreate() я показываю тост, который выполняется до появления диалогового окна выбора разрешения, даже если я сначала вызываю разрешение. Почему сначала появляется тост?Почему сначала выполняется вызов кода после запуска разрешения на запуск?

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




} 

ответ

3

Метод requestPermissions вызова выполняется асинхронно, поэтому, когда этот вызов идет к новой нити и он возвращается к главному, Тост может появиться до диалога. Это просто зависит от того, сколько работы сделано в фоновом режиме и какой поток быстрее.

Для получения дополнительной информации о разрешениях и асинхронной части, проверьте документы здесь: https://developer.android.com/training/permissions/requesting.html#perm-request

Этот метод функции асинхронно: он возвращается сразу, а после того, как пользователь отвечает на диалоговое окно, система вызывает метод обратного вызова приложения с результатами, передавая тот же код запроса, который приложение передало requestPermissions().

Смежные вопросы