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

Runnableオブジェクト内のメソッドrun()内にデバッグメッセージを入れて、実行されたことがあるかどうかを確認しようとしましたか?

Runnableインスタンスを使用せずに、たとえばスレッド内で定義しても機能しません。

ガイドとして使用できるオープンソースのGPSロギングサービスの例をいくつか示します。

GPSLoggerService

GPSLoggingService

于 2013-02-04T14:45:12.137 に答える
1

locationProviderInitでRunnableを実行しません...

于 2013-02-04T14:56:18.200 に答える