2016-12-20 4 views
0

У меня есть приложение, которое зависит от разрешенных служб определения местоположения.Заставить приложение ждать, пока службы определения местоположения не будут включены?

Таким образом, когда пользователь запускает приложение, появляется диалоговое окно и проверяется, включена ли служба определения местоположения. Тем не менее, я хочу, чтобы приложение приостанавливалось до тех пор, пока пользователь не перейдет на страницу настроек (к которому он перенаправлен, нажав кнопку «ОК» в диалоговом окне) и включив службы определения местоположения. Как только он это сделает, он должен вернуться к MainActivity, и код должен продолжаться там, где он остановился.

Если я не позволяю приложению приостанавливаться, код просто продолжается и пытается выполнить код, требующий, чтобы службы определения местоположения были включены, и приложение вылетает.

В настоящее время у меня есть это, так как я могу изменить его так, чтобы он ждал?

if(!location_enabled) { 
    // notify user 
    AlertDialog.Builder dialog = new AlertDialog.Builder(this); 
    dialog.setMessage("Location services are currently not " + 
      "enabled. You must enable this in order to continue. Would you like to do this now?"); 

    dialog.setPositiveButton("Take me to location services", new DialogInterface.OnClickListener() { 
     @Override 
     public void onClick(DialogInterface paramDialogInterface, int paramInt) { 
      startActivity(new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS)); 
      // WAIT UNTIL LOCATION SERVICES ENABLED 
     } 
    }); 

    dialog.setNegativeButton(context.getString(R.string.Cancel), new DialogInterface.OnClickListener() { 

     @Override 
     public void onClick(DialogInterface paramDialogInterface, int paramInt) { 
      //EXIT APPLICATION 

     } 
    }); 
    dialog.show(); 
} 

if(location_enabled) { 
    if (ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED) { 
     //DO FANCY STUFF WITH LOCATION 
    } 
} 

ответ

0

Вы можете легко использовать startActivityForResult в вашем случае.

Когда вы начинаете настройки, чтобы включить свое местоположение, вы можете начать такое намерение.

// Declare a global variable first 
private final int ACTION_LOCATION_SETTING = 100; 

// Now change the onClickListener like this 
dialog.setPositiveButton("Take me to location services", new DialogInterface.OnClickListener() { 
    @Override 
    public void onClick(DialogInterface paramDialogInterface, int paramInt) { 
     Intent locationSettingIntent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS); 
     startActivityForResult(locationSettingIntent, ACTION_LOCATION_SETTING); 
    } 
}); 

Теперь, когда вы вернетесь из настройки местоположения, вы получите обратный вызов здесь.

@Override 
public void onActivityResult(int requestCode, int resultCode, Intent data) { 
    switch (requestCode) { 
     case ACTION_LOCATION_SETTING: 
      if (resultCode == Activity.RESULT_OK) { 
       if (ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED) { 
        //DO FANCY STUFF WITH LOCATION 
       } 
      } 
      break; 
     default: 
      super.onActivityResult(requestCode, resultCode, data); 
    } 
} 

Простой!

+0

Блестящий. Можете ли вы также сообщить мне, что означает значение «imageChooserIntent»? – Chris

+0

Извините, отредактировал ответ. Это должно быть 'locationSettingIntent'. –

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