我想每5分钟获取一次用户位置,并显示为Toast
。这是最好的方法吗? Service
或IntentService
?我想在点击按钮时启动和停止服务。怎么做?
答案 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();