android - 什么是经常获取和存储位置更好 - 服务或广播接收器?

标签 android service location broadcastreceiver

我混淆了 Service 和 BroadcastReceiver。我正在开发基于位置的应用程序。在此,我想在用户的位置发生重大变化(例如 10 米)时将用户的位置存储到数据库中。

我正在为它使用 LocationListener,它工作正常。但我的困境是:在哪里编写 onLocationChanged() 方法 - 在 BroadcastReceiver 的 onReceive() 方法中还是在服务中?

如果我使用的是 Service,那么我应该在 Service 的哪个方法中编写下面的代码?

这是我的位置监听器:

    LocationManager locationManager = (LocationManager)getSystemService(Context.LOCATION_SERVICE);

    LocationListener locationListener = new LocationListener() {
        public void onLocationChanged(Location location) {
            if(location != null){
                //Code to populate location-data into the database table.
            }

        public void onStatusChanged(String provider, int status, Bundle extras) {}

        public void onProviderEnabled(String provider) {}

        public void onProviderDisabled(String provider) {}
      };

    locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 5, 10, locationListener);

任何人都可以建议我实现它的更好方法是什么?我已经阅读了所有关于 Service 和 BroadcastReceiver 的 Android 开发者文档,但我仍然无法区分它们的用法?

最佳答案

这取决于你的目的。如果您想在后台捕获位置,请在服务中使用。

BroadcastReciever 的 onReceive 方法只会在您注册接收什么 Action 时调用。

如果你想在前台做,你可以简单地在 Activity 中使用它。但是当您的 Activity 关闭时,您将无法获取这些位置。

因此,您可以根据自己的功能来决定。

关于android - 什么是经常获取和存储位置更好 - 服务或广播接收器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12974600/

相关文章:

android - 来自位置的邮政编码

android - findViewById 如何初始化 View

java - FilePickerActivity.EXTRA_MODE、FilePickerActivity.MODE_FILE

c++ - Windows 服务不会停止并重新启动

ios - CLLocation didupdatetolocation 未调用

android - Google (Play) sleep 模式下的位置服务更新间隔变化 (Android)

android - 如何在android中按主题级联样式

java - 尝试对 ListView 使用惰性加载程序时抛出空指针异常

android - 从服务调用 Activity 的方法

node.js - 将 node.js express 服务器作为服务启动