2016-12-20 4 views
0

Ich habe eine Anwendung, die abhängig von Standortdiensten aktiviert ist.Lassen Sie die Anwendung warten, bis die Standortdienste aktiviert wurden?

Wenn der Benutzer die Anwendung startet, wird ein Dialogfeld angezeigt und überprüft, ob der Standortdienst aktiviert ist oder nicht. Ich möchte jedoch, dass die Anwendung angehalten wird, bis der Benutzer zur Einstellungsseite wechselt (auf die er beim Klicken auf "OK" im Dialogfeld umgeleitet wird) und die Standortdienste aktiviert. Sobald er es tut, sollte er in der Lage sein, zu MainActivity zurückzukehren und der Code sollte dort fortgesetzt werden, wo er aufgehört hat.

Wenn ich die App nicht anhalten lasse, wird der Code einfach fortgesetzt und versucht, Code auszuführen, für den die Standortdienste aktiviert sein müssen und die App abstürzt.

Ich habe derzeit dies, also wie kann ich es ändern, so dass es wartet?

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 
    } 
} 

Antwort

0

Sie können einfach startActivityForResult in Ihrem Fall verwenden.

Wenn Sie die Einstellungen zum Aktivieren Ihres Standorts starten, können Sie die Absicht wie folgt starten.

// 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); 
    } 
}); 

Wenn Sie jetzt von der Standorteinstellung zurückkehren, erhalten Sie hier einen Rückruf.

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

Einfach!

+0

Brilliant. Können Sie mir auch mitteilen, worauf sich der Wert "imageChooserIntent" bezieht? – Chris

+0

Sorry, bearbeitet die Antwort. Es sollte 'locationSettingIntent' sein. –

Verwandte Themen