I had a relatively similar issue with the GPS RPG that I was working on, and here are some of the comments I noticed:
First, it may take some time for your location, which can cause a problem as you check to see if this field is null.
You can also make sure that location services are actually turned on before doing anything:
private boolean doLocationsCheck(){ if(!checkLocationEnabled()){ final CharSequence[] items = {"Yes", "No"}; AlertDialog.Builder builder = new AlertDialog.Builder(mContext); builder.setCancelable(false); builder.setTitle("Location must be enabled to play this game! Would you like to enable it now?"); builder.setItems(items, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int item) { final int i = item; runOnUiThread(new Runnable() { public void run() { if(i == 0){ Intent intent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS); startActivity(intent); quit(); } else{ quit(); } } }); } }).show(); AlertDialog alert = builder.create(); return false; } else { return true; } } private boolean checkLocationEnabled(){ LocationManager service = (LocationManager) getSystemService(LOCATION_SERVICE); boolean enabled = service.isProviderEnabled(LocationManager.GPS_PROVIDER) || service.isProviderEnabled(LocationManager.NETWORK_PROVIDER); return enabled; }
After I make sure the providers are available, I configure the connection like this:
private void setupLocation() { LocationManager locationManager = (LocationManager) this.getSystemService(Context.LOCATION_SERVICE); LocationListener locationListener = new LocationListener() { public void onLocationChanged(final Location location) { runOnUiThread(new Runnable() { public void run() { mLocation = location;
Then the location is set in the global variable whenever it is updated, and then saved in the settings. Thus, if the providers are turned on, but take some time to get the location, the user can still continue to use the application with his last known location where the application is stored (the program does not start for the first time).
I know that I didn’t have much there, but I thought it really wasn’t necessary, because in the previous answer it was either explained or explained.
Greetings ~
source share