【问题标题】:get location data from service?从服务获取位置数据?
【发布时间】:2013-01-19 06:40:09
【问题描述】:

我尝试提供定位服务,但不知何故我无法使其工作。 Lat 和 Lng 始终为 NULL。

我在locManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, locListener); 上有一些异常,所以我把它放在一个 run() 方法中,现在异常消失了。可能是什么问题?

那么让定位服务发挥作用的解决方案是什么?

代码:

public class LocationService extends Service {

    private Timer timer = new Timer();

    private LocationManager locManager;
    private LocationListener locListener = new MyLocationListener();

    private String latitude;
    private String longitude;
    private String providerToSend;

    Messenger messenger;
    Timer t = new Timer();

    @Override
    public IBinder onBind(Intent arg0) {
        return null;
    }

    public void onCreate() {
        super.onCreate();

        locListener = new MyLocationListener();
        locationProviderInit();
        startService();

    }

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

    }

    private void startService() {


        locManager = (LocationManager) this.getSystemService(Context.LOCATION_SERVICE);

        String token = new SharedPreffer(this).loadPreferences("token");

            Log.d("Debug - token: ", "Van Token: " + token);

            t.schedule(new TimerTask() {

                @Override
                public void run() {

                    locationProviderInit();

                    if (latitude != null && longitude != null) {

                        Log.d("Debug - lat: ", latitude);
                        Log.d("Debug - lng: ", longitude);

                    } else {

                        Log.d("Debug - lat and lng are: ", "NULL");
                    }

                }
            }, 0, 5000);

    }

    private void locationProviderInit() {

        new Runnable() {

            @Override
            public void run() {

                try {

                    boolean gps_enabled = locManager.isProviderEnabled(LocationManager.GPS_PROVIDER);
                    boolean network_enabled = locManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER);

                    if (gps_enabled) {
                        locManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, locListener);
                        providerToSend = LocationManager.GPS_PROVIDER;
                    }

                    if (network_enabled) {
                        locManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, locListener);
                        providerToSend = LocationManager.NETWORK_PROVIDER;
                    }

                } catch (Exception e) {
                    Log.d("Debug", e.toString());
                }
            }
        };

    }


    class MyLocationListener implements LocationListener {
        public void onLocationChanged(Location location) {

            if (location != null) {
                longitude = Double.toString(location.getLongitude());
                latitude = Double.toString(location.getLatitude());
            }
        }

        public void onProviderDisabled(String arg) {
        }

        public void onProviderEnabled(String arg) {
        }

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

    private void shutdownService() {
        if (timer != null)
            timer.cancel();
        Log.i(getClass().getSimpleName(), "Timer stopped!!!");
    }

}

【问题讨论】:

  • 异常是什么?

标签: android android-service android-location


【解决方案1】:

你没有在 locationProviderInit 中执行 Runnable...

【讨论】:

  • 这没有提供问题的答案。要批评或要求作者澄清,请在他们的帖子下方发表评论 - 您可以随时评论自己的帖子,一旦您有足够的reputation,您就可以comment on any post。
  • 对不起,我认为它确实回答了这个问题 - 我会澄清一下:runnable 永远不会运行,所以你没有注册位置更新,你可以在 run() 函数中放置一个断点并查看它。如果不注册位置更新,onLocationChanged() 将永远不会被调用。
  • 好的,但我们将不胜感激一些更好的解释和更广泛的答案......这种一句话(或更糟糕的一两个词)答案通常被认为是“垃圾邮件” - 这应该只是评论...如果没有什么要说的,请将其发布为评论,并且如果 OP 认为它是正确的答案,您仍然可以再次发布该答案作为答案,说明您发布的简短答案确实有帮助解决问题:-)
【解决方案2】:

您是否尝试过在 Runnable 对象的 run() 方法中放入调试消息,并查看它是否曾经被执行过?

定义一个 Runnable 实例而不使用它,例如在一个线程中,将不起作用。

以下是一些开源 GPS 记录服务示例,您可以将其用作指南。

GPSLoggerService

GPSLoggingService

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-04-28
    • 1970-01-01
    • 2012-01-18
    • 2022-09-24
    • 2018-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多