即使应用程序关闭,也每 5 分钟向服务器发送纬度和经度
Posted
技术标签:
【中文标题】即使应用程序关闭,也每 5 分钟向服务器发送纬度和经度【英文标题】:Send latitude and longitude to server every 5 minutes even the app was closed 【发布时间】:2016-05-05 09:50:17 【问题描述】:我需要每 5 分钟向服务器发送一次纬度和经度值。我们的团队成员可以在旅行期间关闭此应用程序,同时将纬度和经度值发送到服务器。我不知道如何来实现这个方法。
【问题讨论】:
创建后台服务获取位置并将其发送到服务器简单! @DhawalSodhaParmar 这是我第一次使用后台进程。我在这方面没有足够的知识。我知道得到纬度和经度,但是当应用程序关闭时如何将数据发送到服务器. 让您轻松搞定。首先了解后台服务github.com/codepath/android_guides/wiki/…,然后如何从设备***.com/questions/17519198/… 和developer.android.com/intl/ru/training/location/… 在服务器上最后一次发送中获取位置(我想你已经知道了) @DhawalSodhaParmar 谢谢... 一些堆栈答案请检查,但在使用之前从之前的评论***.com/a/28535885/1168654和***.com/q/14478179/1168654了解它们 【参考方案1】:我终于找到了我的问题的答案。我们可以在后台运行许多方法,如 Intent Service 和 Alarm Manager。我使用了后台进程的警报管理器。它会每 5 分钟调用一次服务。在我的MainActivity
中,我输入了下面提到的代码。
private void scheduleNotify()
Intent notificationIntent = new Intent(this, SendLocation.class);
PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 0, notificationIntent, PendingIntent.FLAG_UPDATE_CURRENT);
AlarmManager alarmManager = (AlarmManager)getSystemService(Context.ALARM_SERVICE);
alarmManager.setInexactRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP,0,1000*60*5,pendingIntent);
在AlarmManager
,我设置了setInexactRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP,0,1000*60*5,pendingIntent);
它将每 5 分钟重复一次持续时间(1000*60*5 毫秒 = 5 分钟)
SendLocation.class
public class SendLocation extends BroadcastReceiver implements LocationListener
@Override
public void onReceive(Context mContext, Intent intent)
try
locationManager = (LocationManager) mContext.getSystemService(mContext.LOCATION_SERVICE);
isGPSEnabled = locationManager
.isProviderEnabled(LocationManager.GPS_PROVIDER);
isNetworkEnabled = locationManager
.isProviderEnabled(LocationManager.NETWORK_PROVIDER);
if (!isGPSEnabled && !isNetworkEnabled)
else
this.canGetLocation = true;
if (isNetworkEnabled)
locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, MIN_TIME_BW_UPDATES, MIN_DISTANCE_CHANGE_FOR_UPDATES,this);
if (locationManager != null)
location = locationManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
if (location != null)
latitude = location.getLatitude();
longitude = location.getLongitude();
catch (Exception e)
Log.i("sendlocation","Every 5 minutes it will appear in Log Console"+latitude+" "+longitude);
// code for send location to srver
【讨论】:
为了获得比位置管理器更好的性能切换到融合位置以上是关于即使应用程序关闭,也每 5 分钟向服务器发送纬度和经度的主要内容,如果未能解决你的问题,请参考以下文章