2016-04-07 6 views
-4

, что это лучший способ получить местоположение пользователя после каждой две минуты даже ваше приложение будет убито заранее спасибоAndroid Как получить местоположение пользователя непрерывно, даже ваше приложение убито

+2

создать одна из фоновых служб и эта служба работают в фоновом режиме. постоянно получать местоположение .. –

+0

, но когда служба останавливается, то кто я могу получить обновление местоположения –

+1

Да, вы можете достичь этого, поставив некоторые усилия и R & D. – Aks4125

ответ

0

Вы можете выбрать использовать Background Service для ваших Мероприятия.

В рамках этой службы вы устанавливаете свой сервис для опроса своего местоположения в выбранный вами промежуток времени.

После этого вы можете использовать LocalBroadcastManager, чтобы транслировать результаты ваших интересов, чтобы вернуть полезные результаты в ваше приложение.

Надеюсь, это поможет!

Cheers! Счастливое программирование!

+0

, но когда приложение будет убито или перезагрузка устройства, прекратите службу, пожалуйста, скажите мне другой способ. –

+0

Вы можете добавить приемник вещания для получения полной загрузки – Ameer

+0

@NisarAhmad http://developer.android.com/ reference/android/app/Service.html # START_STICKY – sihao

0

Используйте код Started service для запуска кода в фоновом режиме, даже когда приложение будет убито. Используйте код Timer и Timer task, чтобы выполнить код сбора местоположения через определенные промежутки времени.

пример Таймер

new Timer().scheduleAtFixedRate(new TimerTask() { 
      @Override 
      public void run() {} 
     }, 0, 1000); 
+0

вы можете отправить мне образец –

+0

. Вы можете найти образцы по предоставленным ссылкам и попробуйте найти ответы на конкретные проблемы, с которыми вы сталкиваетесь, пытаясь реализовать это самостоятельно. –

+0

Я добавил пример для таймера. Как использовать различные типы сервисов - это ссылка на начальную службу. Я надеюсь, что это ответит на ваш первоначальный вопрос –

0

Помимо того, что предложили J Уитфилд и sihao, Вы можете также сделать свой сервис как сервис Start (не Намерение Service). Затем в onStartCommand службы верните START_STICKY.

Вы также можете попробовать запустить службу в отдельном процессе, чтобы она не была убита, даже если ваше приложение будет убито.

3

Следуйте эти шаги

1) Написать Данный код в файле манифест file.Create широковещательного приемника и обслуживание.

<uses-permission android:name="android.permission.INTERNET" /> 
    <uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES" /> 
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/> 
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/> 

    <receiver 
    android:name=".activity.Timerservice" 
    android:process=":remote" > 
    </receiver> 

    <service 
    android:name=".model.GPSTracker" 
    android:exported="false" /> 

2) в основной деятельности создать на method.for продолжает фиксировать интервал времени получить текущий лат длиной

public void scheduleAlarm() { 
    // Construct an intent that will execute the AlarmReceiver 
    Intent intent = new Intent(getApplicationContext(), Timerservice.class); 
    // Create a PendingIntent to be triggered when the alarm goes off 
    pIntent = PendingIntent.getBroadcast(this, Timerservice.REQUEST_CODE, 
      intent, PendingIntent.FLAG_UPDATE_CURRENT); 
    // Setup periodic alarm every 5 seconds 
    long firstMillis = System.currentTimeMillis(); // alarm is set right away 
    alarm = (AlarmManager) this.getSystemService(Context.ALARM_SERVICE); 
    // First parameter is the type: ELAPSED_REALTIME, ELAPSED_REALTIME_WAKEUP, RTC_WAKEUP 
    // Interval can be INTERVAL_FIFTEEN_MINUTES, INTERVAL_HALF_HOUR, INTERVAL_HOUR, INTERVAL_DAY 
    alarm.setInexactRepeating(AlarmManager.RTC_WAKEUP, firstMillis, 
      60000, pIntent); 

} 

3) TimeService.java (Broadcast класс приемника)

public class Timerservice extends BroadcastReceiver { 
public static final int REQUEST_CODE = 12345; 
Context mContext; 
public static final String ACTION = "com.codepath.example.servicesdemo.alarm"; 

// Triggered by the Alarm periodically (starts the service to run task) 
@Override 
public void onReceive(Context context, Intent intent) { 


    final LocationManager manager = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE); 
    if (!manager.isProviderEnabled(LocationManager.GPS_PROVIDER)) { 
     Intent i1 = new Intent(context, AlertDialogActivity.class); 
     i1.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
     context.startActivity(i1); 
     // buildAlertMessageNoGps(); 
    }else{ 
     Intent i = new Intent(context, GPSTracker.class); 
     context.startService(i); 
    } 
} 

} 

4) GPSTracker.class

public class GPSTracker extends Service implements LocationListener { 
Context mContext; 

// flag for GPS status 
boolean isGPSEnabled = false; 

// flag for network status 
boolean isNetworkEnabled = false; 

boolean canGetLocation = false; 

Location location; // location 
double latitude; // latitude 
double longitude; // longitude 

double Lastlatitude; // latitude 
double Lastlongitude; // longitude 

double totalDistance, Totalkm; 

SessionManagement sessionManagement; 

// The minimum distance to change Updates in meters 
private static final long MIN_DISTANCE_CHANGE_FOR_UPDATES = 10; // 10 meters 

// The minimum time between updates in milliseconds 
private static final long MIN_TIME_BW_UPDATES = 1000 * 60 * 1; // 1 minute 

// Declaring a Location Manager 
protected LocationManager locationManager; 

public GPSTracker() { 
    //super("GPS"); 
} 
public GPSTracker(Context mContext) { 
    //super(""); 
    this.mContext = mContext; 
    getLocation(); 
} 

public Location getLocation() { 
    try { 
     locationManager = (LocationManager) mContext 
       .getSystemService(LOCATION_SERVICE); 

     Criteria locationCritera = new Criteria(); 
     String providerName = locationManager.getBestProvider(locationCritera, 
       true); 
     if (providerName != null) 
      location = locationManager.getLastKnownLocation(providerName); 

     GPSTracker locationListener = new GPSTracker(); 

     locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 
       0, locationListener); 


     // getting GPS status 
     isGPSEnabled = locationManager 
       .isProviderEnabled(LocationManager.GPS_PROVIDER); 

     // getting network status 
     isNetworkEnabled = locationManager 
       .isProviderEnabled(LocationManager.NETWORK_PROVIDER); 

     if (!isGPSEnabled && !isNetworkEnabled) { 
      // no network provider is enabled 
     } else { 
      this.canGetLocation = true; 
      // First get location from Network Provider 

      if (isNetworkEnabled) { 
       locationManager.requestLocationUpdates(
         LocationManager.NETWORK_PROVIDER, 
         MIN_TIME_BW_UPDATES, 
         MIN_DISTANCE_CHANGE_FOR_UPDATES, this); 
       Log.d("Network", "Network"); 
       if (locationManager != null) { 
        location = locationManager 
          .getLastKnownLocation(LocationManager.NETWORK_PROVIDER); 
        if (location != null) { 
         latitude = location.getLatitude(); 
         longitude = location.getLongitude(); 
         Log.i("location", +latitude + " " + longitude); 
         // Toast.makeText(getApplicationContext(),"LatLang is" +latitude+" "+longitude,Toast.LENGTH_LONG).show(); 
        } 
       } 
      } 
      // if GPS Enabled get lat/long using GPS Services 
      if (isGPSEnabled) { 
       if (location == null) { 
        locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 
          MIN_TIME_BW_UPDATES, 
          MIN_DISTANCE_CHANGE_FOR_UPDATES, this); 
        Log.d("GPS Enabled", "GPS Enabled"); 
        if (locationManager != null) { 
         location = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER); 
         if (location != null) { 
          latitude = location.getLatitude(); 
          longitude = location.getLongitude(); 
         } 
        } 
       } 
      } 
     } 

    } catch (Exception e) { 
     e.printStackTrace(); 
    } 

    return location; 
} 

public void stopUsingGPS() { 
    if (locationManager != null) { 
     locationManager.removeUpdates(GPSTracker.this); 
    } 
} 

public double getLatitude() { 
    if (location != null) { 
     latitude = location.getLatitude(); 
    } 

    // return latitude 
    return latitude; 
} 

public double getLongitude() { 
    if (location != null) { 
     longitude = location.getLongitude(); 
    } 

    // return longitude 
    return longitude; 
} 

public boolean canGetLocation() { 
    return this.canGetLocation; 
} 


@Override 
public void onLocationChanged(Location location) { 
    if (location != null) { 
     this.location = location; 
     getLatitude(); 
     getLongitude(); 
    } 
} 

@Override 
public void onStatusChanged(String provider, int status, Bundle extras) { 

} 

@Override 
public void onProviderEnabled(String provider) { 

} 

@Override 
public void onProviderDisabled(String provider) { 

} 


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

    @Override 
    public int onStartCommand(Intent intent, int flags, int startId) { 

} 
@Override 
public void onDestroy() { 
    super.onDestroy(); 
} 
Смежные вопросы