Я хочу создать приложение для Android, которое может фиксировать местоположение устройства, даже если оно не запущено. Я пытался создать приложение, которое возвращает данные из службы в основной поток. Это приложение работает нормально, когда оно запущено, но если оно закрыто, оно не захватывает местоположение.
Я прикрепил свой класс обслуживания. Теперь он просто фиксирует местоположение и обновляет интерфейс. работает , даже когда приложение находится в пауза . но не работает , когда приложение уничтожено .
public class DeviceLocationService extends Service {
private LocationListener listener;
private LocationManager locationManager;
private final String TAG = this.getClass().getName();
private int count = 0;
@SuppressLint("MissingPermission")
@Override
public void onCreate() {
listener = new LocationListener() {
@Override
public void onLocationChanged(Location location) {
Intent i = new Intent(Config.LOCATION_INTENT_FILTER);
HashMap<Object,Object> hashMap = new HashMap<>();
Log.d(TAG, "onAccuracyChanged: "+location.getAccuracy());
hashMap.put("latitude",location.getLatitude());
hashMap.put("longitude",location.getLongitude());
hashMap.put("accuracy",location.getAccuracy());
hashMap.put("provider",location.getProvider());
JSONObject jo = new JSONObject(hashMap);
i.putExtra("location_data",jo.toString());
Log.d(TAG, "onLocationChanged: "+jo.toString());
sendBroadcast(i);
}
@Override
public void onStatusChanged(String provider, int status, Bundle extras) {
Log.d(TAG, "onStatusChanged: provider "+provider);
Log.d(TAG, "onStatusChanged: status "+status);
}
@Override
public void onProviderEnabled(String provider) {
Log.d(TAG, "onProviderEnabled: "+provider);
}
@Override
public void onProviderDisabled(String provider) {
Intent i = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
}
};
locationManager = (LocationManager) getApplicationContext().getSystemService(Context.LOCATION_SERVICE);
if (locationManager != null) {
//noinspection MissingPermission
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER,0,0,listener);
locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER,0,0,listener);
}
}
@Override
public IBinder onBind(Intent intent) {
return null;
}
}