oreo - El servicio Android no recibe actualizaciones de ubicación
cual es la ultima version de android 2018 (1)
Resulta que el código funciona bien. Reinicié mi teléfono y comencé a recibir actualizaciones. ¡Parece que Android se había quedado atascado en alguna parte!
Sin embargo, al tratar de obtener LocationUpdates en mi Servicio, parece que nunca se dispara el LocationListener.
Mi servicio inicia un hilo, que luego realiza un bucles con un Handler.postDelayed () - Originalmente utilicé sleep (30000), sin embargo, pensé que esto podría haber estado impidiendo la ubicaciónUpdates. Todo lo que hace el servicio es iniciar este hilo, y onStartCommand devuelve STICKY para que siga funcionando.
public class TST extends Thread {
final int DefaultNetworkTick = 120000; // 2 minutes
final int DefaultLocationTick = 20000; //600000;
boolean CustomLocationUpdateTick = false; // If the network requests faster updates
int CustomLocationUpdateTickMs = 600000; // Default 10 minutes
public boolean kill = false;
public Context context;
Handler handler = new Handler();
Date nextNetworkReadTick;
@Override
public void run() {
Log.i("TST", "Start run() iteration");
// Set the ticks to the appropriate values
// Network gets read every 2 minutes
nextNetworkReadTick = new Date();
nextNetworkReadTick.setTime(nextNetworkReadTick.getTime() + DefaultNetworkTick);
Log.i("TST", "Set next Network tick to " + nextNetworkReadTick.toString());
Looper.prepare();
Log.i("TST", "Performing location update setup...");
SetupLocationListenerDefault();
handler.postDelayed(runFunc, 2000);
Looper.loop();
}
// We do our networking and stuff in here
public Runnable runFunc = new Runnable(){
public void run()
{
Log.i("TST", "run() iteration");
if( new Date().after(nextNetworkReadTick) ) {
// Set next tick
nextNetworkReadTick = new Date();
nextNetworkReadTick.setTime(nextNetworkReadTick.getTime() + DefaultNetworkTick);
UpdateNetwork();
}
handler.postDelayed(runFunc, 1000);
}
};
private void UpdateNetwork() {
// TODO Auto-generated method stub
}
LocationManager locMgr;
PendingIntent locationUpdateIntentPending;
Intent locationUpdateIntent;
LocationListener locationListener = new LocationListener()
{
@Override
public void onLocationChanged(Location arg0) {
// TODO Auto-generated method stub
Log.i("TST", "OnLocationChanged: " + arg0.toString());
}
@Override
public void onProviderDisabled(String provider) {
// TODO Auto-generated method stub
Log.i("TST", "OnProviderDisabled: " + provider);
}
@Override
public void onProviderEnabled(String provider) {
// TODO Auto-generated method stub
Log.i("TST", "OnProviderEnabled: " + provider);
}
@Override
public void onStatusChanged(String provider, int status, Bundle extras) {
// TODO Auto-generated method stub
Log.i("TST", "OnStatusChanged");
}
};
private void SetupLocationListenerDefault() {
// Reset location manager
if( locMgr != null ) {
locMgr.removeUpdates(locationListener);
locMgr = null;
}
locMgr = (LocationManager)context.getSystemService(Context.LOCATION_SERVICE);
Criteria criteria = new Criteria();
criteria.setAccuracy(Criteria.ACCURACY_FINE);
String provider = locMgr.getBestProvider(criteria, true);
locMgr.requestLocationUpdates(provider, DefaultLocationTick, 0, locationListener);
}
}