1

我尝试提供定位服务,但不知何故我无法使其工作。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!!!");
    }

}
4

2 回答 2

1

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

于 2013-02-04T14:56:18.200 回答
1

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

定义一个 Runnable 实例而不使用它,例如在一个线程中,是行不通的。

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

GPSLoggerService

GPS记录服务

于 2013-02-04T14:45:12.137 回答