服务或意图服务每5秒向服务器无休止地发送位置更新?

时间:2018-01-01 06:12:04

标签: android service geolocation android-volley android-intentservice

我正在使用 * Running on http://127.0.0.1:5000/ (Press CTRL+C to quit) 127.0.0.1 - - [30/Dec/2017 23:57:52] "GET / HTTP/1.1" 200 - 127.0.0.1 - - [30/Dec/2017 23:57:53] "GET /data.tsv HTTP/1.1" 404 - 对象来获取位置更新和其他GoogleCientApi传感器,并每隔5秒将其发送到服务器。我想让它无休止地在后台运行,即24 * 7电池优化。在Accelerometer中无需更新任何内容。请建议您使用UI还是Service? 如果使用IntentService如何使用Service运行它?任何建议或文章链接都会有所帮助。

3 个答案:

答案 0 :(得分:1)

如果您想使用服务实现此目的

    public class MyService extends Service {
    @Nullable
    @Override
    public IBinder onBind(Intent intent) 
    {
        return null;
    }

    @Override
    public int onStartCommand(Intent intent, int flags, int startId)
    {
        ScheduledExecutorService scheduleTaskExecutor = Executors.newScheduledThreadPool(5);
        // This schedule a runnable task every x unit of time
        scheduleTaskExecutor.scheduleAtFixedRate(new Runnable() 
        {
            public void run() 
            {
                callAPI();
            }
        }, 0, 10, TimeUnit.SECONDS);
        return START_STICKY;
    }

    @Override
    public void onDestroy() 
    {
        super.onDestroy();
    }

    public void callAPI() 
    {
    //Upload data to server and do your stuff
    }
}

您还需要在AndroidManifest.xml

中注册您的服务
<service
        android:name=".service.MyService"
        android:enabled="true"
        android:exported="true"
        android:stopWithTask="false" />

通过活动

致电您的服务
if (!checkServiceRunning()) 
    {
        Intent intent = new Intent(MainActivity.this, MyService.class);
        startService(intent);
    }

答案 1 :(得分:0)

使用以下组件

是可行的

使用 Android前台服务获取应用打开/关闭时的当前位置。

  

注意:最新的Android版本不允许获取当前位置   通过Backghround服务。

使用套接字/推送器更新位置到用户服务器。

参考链接

1)。 https://developer.android.com/guide/components/services.html

2)。 http://www.truiton.com/2014/10/android-foreground-service-example/

对于Socket

1)。 https://socket.io/blog/native-socket-io-and-android/

2)。 https://github.com/socketio/socket.io-client-java

对于Pusher

1)。 https://pusher.com/docs/android_quick_start

答案 2 :(得分:0)

我建议您使用闹钟。

您可以使用服务继续在后台和wakelocks执行代码,但我必须在您描述的内容中执行类似操作,并发现如果Android系统需要空闲内存,则可以随时终止服务。 / p>

我找到的解决方案是使用alarms,如果您安排闹钟,无论您的应用是否仍在执行,此闹钟都会响起。这样,即使系统由于缺乏资源而杀死了应用程序,我的应用程序也可以获得设备位置。这是我发现的唯一解决方案。

当他们说如果你真的需要你的应用程序继续使用警报而不是服务时,我想在谷歌i / o中找到了这个想法。

使用精确的amarms作为不精确的amarms有时需要至少5分钟,直到闹钟响起。