即使应用程序关闭,也每 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 分钟向服务器发送纬度和经度的主要内容,如果未能解决你的问题,请参考以下文章

React-Native 在应用程序被杀死时运行

当应用程序在后台时向服务器发送纬度和经度

即使在打盹模式下也每 15 秒获取一次位置

在后台向服务器发送位置更新

如何防止从客户端向服务器端发送数据(位置、纬度和经度)作弊?

如何定期向 Web 服务器发送位置数据(纬度、经度)