Reputation: 4632
I don't get it enter in onLocationChanged,onStatusChanged,onProviderEnabled,onProviderDisabled I checked turn off and turn on the gps I tried outside office (for that the counter called contador you see in this example)
This is my code
import android.Manifest;
import android.app.IntentService;
import android.app.Notification;
import android.app.PendingIntent;
import android.content.Intent;
import android.content.Context;
import android.content.pm.PackageManager;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Bundle;
import android.support.v4.app.ActivityCompat;
/**
* An {@link IntentService} subclass for handling asynchronous task requests in
* a service on a separate handler thread.
* <p>
* TODO: Customize class - update intent actions, extra parameters and static
* helper methods.
*/
public class ISSubProcesoGps extends IntentService {
// TODO: Rename actions, choose action names that describe tasks that this
// IntentService can perform, e.g. ACTION_FETCH_NEW_ITEMS
public static int hacambiado=0;
LocationManager lm;
double longitude;
double latitude;
Location location=null;
public static volatile boolean shouldContinue = true;
int contador = 0;
LocationListener locationListener = new LocationListener() {
public void onLocationChanged(Location location) {
longitude = location.getLongitude();
latitude = location.getLatitude();
//mLocation = location;
//altitude = location.getAltitude();
hacambiado++;
}
@Override
public void onStatusChanged(String s, int i, Bundle bundle) {
String x=s;
}
@Override
public void onProviderEnabled(String s) {
String x=s;
}
@Override
public void onProviderDisabled(String s) {
String x=s;
}
};
// TODO: Rename parameters
public ISSubProcesoGps() {
super("ISSubProcesoGps");
}
/**
* Starts this service to perform action Foo with the given parameters. If
* the service is already performing a task this action will be queued.
*
* @see IntentService
*/
@Override
protected void onHandleIntent(Intent mIntent) {
lm = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
lm.getLastKnownLocation(LocationManager.GPS_PROVIDER);
latitude = 0;
longitude = 0;
if (lm.isProviderEnabled(LocationManager.GPS_PROVIDER)) {
if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
return;
}
lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, locationListener);
Intent intent = new Intent(getBaseContext(), MainActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
PendingIntent pendIntent = PendingIntent.getActivity(this, 0, intent, 0);
Notification notification = new Notification.Builder(this)
.setSmallIcon(R.drawable.ic_menu_gallery) // the status icon
.setTicker("hola muy myintentservice") // the status text
.setWhen(System.currentTimeMillis()) // the time stamp
.setContentTitle("content title") // the label of the entry
.setContentText("content teext") // the contents of the entry
.setContentIntent(pendIntent) // The intent to send when the entry is clicked
.build();
startForeground(1, notification);
while(true)
{
try {
location = lm.getLastKnownLocation(LocationManager.GPS_PROVIDER);
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
if(!shouldContinue)
{
if(lm!=null)
lm.removeUpdates(locationListener);
lm=null;
break;
}
}
}
}
}
Upvotes: 0
Views: 495
Reputation: 43
Your Intent Service is getting removed from memory before it can get a proper reading from it's location listeners. This is due to an Intent Service getting destroyed after it's method onHandleIntent(Intent intent) is called. Try listening to location updates constantly with a Service and retrieve those updates as needed with a separate Intent Service.
Here's a link that explores how another user did this. Location listener works from a Service but not an IntentService
See 'Edit3' for that users solution after tips and feedback from other users. Hope this helps.
Upvotes: 1