如何使用Android中的后台服务每5分钟获取一次设备位置?

时间:2016-07-01 07:07:02

标签: android service geolocation location android-intentservice

我想每5分钟获取一次用户位置,并显示为Toast。这是最好的方法吗? ServiceIntentService?我想在点击按钮时启动和停止服务。怎么做?

3 个答案:

答案 0 :(得分:4)

使用警报服务触发位置服务,这将导致在数据库表中保存位置

public static void setAlarmTimely(Context context) {
    AlarmManager alarmMgr;
    PendingIntent alarmIntent;

    alarmMgr = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
    Intent intent = new Intent(context, AlarmReceiver.class);
    intent.putExtra(IntentConstants.ALARM_INTENT, IntentConstants.INTENT_REQUEST_CODE_LOCATION_TRACK);
    alarmIntent = PendingIntent
            .getBroadcast(context, IntentConstants.INTENT_REQUEST_CODE_LOCATION_TRACK, intent, 0);
    alarmMgr.cancel(alarmIntent);

    Calendar calendar = Calendar.getInstance();
    LOGD(TAG, time + " ");
    alarmMgr.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis() + locationCaptureTime * 60 * 1000,
            5 * 60 * 1000, alarmIntent);
}
按钮上的

单击取消警报

AlarmManager alarmMgr;
    PendingIntent alarmIntent;
    LOGD(TAG, "cancelling location update");
    alarmMgr = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
    Intent intent = new Intent(context, AlarmReceiver.class);
    intent.putExtra(IntentConstants.ALARM_INTENT, IntentConstants.INTENT_REQUEST_CODE_LOCATION_TRACK);
    alarmIntent = PendingIntent
            .getBroadcast(context, IntentConstants.INTENT_REQUEST_CODE_LOCATION_TRACK, intent, 0);
    alarmMgr.cancel(alarmIntent);

答案 1 :(得分:0)

您可以使用LocationManager执行此操作,您需要设置时间间隔。

例如

LocationManager = new LocationManager();
 locationManager.requestLocationUpdates(
                        LocationManager.NETWORK_PROVIDER,
                        TIME_BW_UPDATES,
                        MIN_DISTANCE_CHANGE_FOR_UPDATES, this);

参数

provider String:要注册的提供者的名称

minTime long:位置更新之间的最短时间间隔,以毫秒为单位

minDistance float:位置更新之间的最小距离,以米为单位

listener LocationListener:一个位于其

的LocationListener 将为每个位置更新调用

onLocationChanged(Location)方法

您可以在此页面上阅读更多内容 LocationManager

答案 2 :(得分:0)

使用粘性服务执行此操作

   protected void onHandleIntent(Intent intent) {
        final Handler handler = new Handler();
        handler.postDelayed(new Runnable() {
            @Override
            public void run() {
                //Log.e(LOG_TAG, "Awake - "+i);
              //  Log.i(LOG_TAG,"TEST ALARM TIME");
            //  do your task -- here get location 
            //change the time interval as per your need.

           handler.postDelayed(this, 300000);
            }
        },1000);
    }

然后从oncreate of service

中调用它
Settings.Builder settings = Settings.builder()
.put("path.home", ".")
.put("discovery.zen.ping.unicast.hosts","192.168.1.1");

Node node = NodeBuilder.nodeBuilder().settings(settings)
      .clusterName("elasticsearch")
      .client(true)
      .node();