2014-06-29 3 views
1

Я хочу сделать следующее:андроид приложения запуска всегда, даже если приложение в фоновом режиме

1] - слушать изменение местоположения GPS телефона и отправить его на сервер для отслеживания местоположения пользователя непрерывно

2] - Я нашел пример, чтобы найти местоположение GPS с помощью LocationListener

3] - Я нашел способ, чтобы открыть мое приложение, когда перезагрузка устройства

мне нужна помощь, чтобы иметь возможность отправить эти данные даже если пользователь поставил заявку ation in background

Любая помощь здесь?

+0

Вы можете START_STICKY услугу. Но рассмотрите влияние на батарею, вызванную вашей программой. – Skynet

+1

@ByzantineFailure: Что вы подразумеваете под START_STICKY? есть ли у вас какой-нибудь пример или учебник, который может мне помочь? –

+0

[This] (http://developer.android.com/guide/components/services.html) и [this] (http://stackoverflow.com/questions/9093271/start-sticky-and-start-not- липкий) – Skynet

ответ

1

эта служба должна работать в фоновом режиме

LocationClient является основной точкой входа для определения местоположения, связанных с API-интерфейсов, таких как местоположение и геозоны.

Используйте LocationClient для:

  • подсоединять и отсоединять в Google Location Services.
  • Запросить/удалить обратные вызовы обновления местоположения.
  • Запрос/удаление геообъективов.

Чтобы установить соединение, вызовите connect() и дождитесь обратного вызова onConnected (android.os.Bundle).

LocationRequest объекты используются для запроса качества обслуживания для обновлений местоположения из LocationClient.

в LocationRequest, вы можете установить там параметры, такие как точность местоположения и временной интервал между обновлениями местоположения.

onLocationChanged будет вызываться в соответствии с временным интервалом, установленным в LocationRequest, и оттуда вы можете обновить свой сервер. служба не работает в фоновом режиме, поэтому вам необходимо обновить сервер AsyncTask или каким-либо другим способом, просто убедитесь, что обновления сервера выполнены в фоновом потоке.

public class LocationUpdatesService extends Service implements GooglePlayServicesClient.ConnectionCallbacks, 
                  GooglePlayServicesClient.OnConnectionFailedListener, 
                  LocationListener { 
private static int LOCATION_UPDATE_INTERVAL = 30000; // how often you will get a location update (this is in milliseconds) 
private LocationClient locationClient; 
private LocationRequest locationRequest; 
private boolean isConnected = false; 

@Override 
// onCreate is called when the service gets started (from an Activity) than immediately calls onStartCommand 
public void onCreate() { 
    super.onCreate(); 

    if (servicesConnected()) { 
     startLocationUpdates(); 
    } else { 
     // isGooglePlayServicesAvailable FAILURE 
    } 
} 

@Override 
public int onStartCommand(Intent intent, int flags, int startId) { 
    return Service.START_STICKY; 
} 

@Override 
public IBinder onBind(Intent intent) { 
    return null; 
} 

private boolean servicesConnected() { 
    int resultCode = GooglePlayServicesUtil.isGooglePlayServicesAvailable(this); 
    if (ConnectionResult.SUCCESS == resultCode) { 
     return true; 
    } else { 
     return false; 
    } 
} 

public void startLocationUpdates() { 

    locationRequest = LocationRequest.create(); 
    locationRequest.setInterval(LOCATION_UPDATE_INTERVAL); 
    locationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY); 
    locationRequest.setFastestInterval(LOCATION_UPDATE_INTERVAL); 
    locationClient = new LocationClient(this, this, this); 
    locationClient.connect(); 
    isConnected = true; 
} 

@Override 
public void onDestroy() { 
    if (locationClient.isConnected()) { 
     onDisconnectClient(); 
    } else { 
     // locationClient is disconnected 
    } 
    super.onDestroy(); 
} 

private void onDisconnectClient() { 
    isConnected = false; 
    locationClient.removeLocationUpdates(this); 
    locationClient.disconnect(); 
    locationRequest = null; 
    locationClient = null; 
} 


@Override 
public void onLocationChanged(Location location) { 
    // update server from here with AsyncTask (or some other way but in the background) 
} 

@Override 
public void onConnectionFailed(ConnectionResult connectionResult) { 

} 

@Override 
public void onConnected(Bundle bundle) { 
    locationClient.requestLocationUpdates(locationRequest, this); 
} 

@Override 
public void onDisconnected() { 
} 

} 

полезные ссылки:

http://developer.android.com/reference/android/app/Service.html

http://developer.android.com/guide/components/services.html

http://developer.android.com/reference/android/location/LocationListener.html

https://developer.android.com/reference/com/google/android/gms/location/LocationRequest.html

https://developer.android.com/reference/com/google/android/gms/location/LocationListener.html

Смежные вопросы