2017-01-05 8 views
0

Я потратил целый день на это, так что, надеюсь, кто-то ответит на него.Как получить обратный вызов, когда пользователь возвращается из настроек в Android?

У меня есть приложение, основанное на местоположении, и у меня есть LauncherActivity, который выполняет некоторую настройку, а затем запускает MainActivity. The LauncerActivity заканчивается двумя важными проверками:

  1. Проверяет наличие разрешений для GPS и запрашивает его, если он не существует.
  2. Проверяет, включен ли GPS сейчас, а если нет - просит пользователя включить его.

Tese две проверки - это практически два диалога. Теперь проблема в том, что после этих двух проверок идет строка «startActivity (mainActivityIntent)». Это не позволяет использовать предыдущие две проверки. Я не могу найти правильный способ реализовать свои потребности. Я знаю, как начать настройки, когда пользователь соглашается включить GPS, но я не знаю, как распознать его возвращение в мою LauncherActivity, поэтому я могу запустить MainActivity.

Я попытался реализовать некоторый пользовательский интерфейс для получения обратных вызовов из диалога «включить GPS» при нажатии, я попытался манипулировать этим с помощью BackStack, но я просто не могу найти правильный путь.

Я не уверен, что объяснил себя достаточно хорошо, и мой английский не так хорош в любом случае, поэтому я с радостью расскажу подробнее, если вы скажете мне. Я также могу опубликовать код для объяснения.

Спасибо!

+1

Не можете ли вы просто проверить еще раз? –

+0

Для разрешений вы должны использовать 'requestPermissions()' и 'onRequestPermissionsResult()'. Для включенных/отключенных нет требования, чтобы пользователь возвращался к вашей деятельности. Вы можете привести их к настройкам, они могут делать что-то там, затем нажать HOME или RECENTS или нажать «Уведомление» и т. Д. Если вы используете провайдера плавного доступа в Play Services, используйте «SettingsApi», чтобы запросить пользователь включает GPS с помощью диалога. В противном случае просто ответьте на соответствующий метод в своем «LocationListener» или повторите попытку в 'onStart()'/'onResume()', как предлагает Кен. – CommonsWare

ответ

0

Используйте метод onRequestPermissionsResult в вашем LauncherActivity так:

@Override 
public void onRequestPermissionsResult(int requestCode, 
             @NonNull String permissions[],@NonNull int[] grantResults) { 
    if(requestCode == REQUEST_CODE && grantResults.length > 0 
      && grantResults[0] == PackageManager.PERMISSION_GRANTED){ 
     startActivity(new Intent(this,MainActivity.class)); 
    } 
} 

Он проверяет, является ли результат успешным. REQUEST_CODE - это случайный int, который вы отправляете с requestPemissions.