0

定期的に位置を更新するサービスを作成しています。しかし、次のコードを使用すると、私がスローされます:

runException Looper.prepare() を呼び出していないスレッド内でハンドラーを作成できません

このコードは、サービス内の Async クラスの doInBackground 内で実行されています

private void UpdatePosition()
    {
        locManager = (LocationManager)getSystemService(Context.LOCATION_SERVICE);


        Location location = 
                locManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);
        showPosition(location);
        locationListener = new LocationListener() {
            public void onLocationChanged(Location location) {
                showPosition(location);
            }
            public void onProviderDisabled(String provider){

            }
            public void onProviderEnabled(String provider){

            }
            public void onStatusChanged(String provider, int status, Bundle extras){
                Log.i("LocAndroid", "Provider Status: " + status);

            }
        };


        locManager.requestLocationUpdates(
                LocationManager.GPS_PROVIDER, 15000, 0, locationListener);
    }

いくつかの投稿を確認していたところ、リクエストを uithread で実行する必要があることがわかりましたが、その方法や場所がわかりません。

私に何ができる?

編集:

これだけをコードに追加すると、エラーが発生しなくなりました

private void UpdatePosition()
    {
        Looper.prepare();
        looper = Looper.myLooper();
        locManager = (LocationManager)getSystemService(Context.LOCATION_SERVICE);


        Location location = 
                locManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);
        showPosition(location);
        locationListener = new LocationListener() {
            public void onLocationChanged(Location location) {
                showPosition(location);
            }
            public void onProviderDisabled(String provider){

            }
            public void onProviderEnabled(String provider){

            }
            public void onStatusChanged(String provider, int status, Bundle extras){
                Log.i("LocAndroid", "Provider Status: " + status);

            }
        };


        locManager.requestLocationUpdates(
                LocationManager.GPS_PROVIDER, 15000, 0, locationListener);
    }

しかし、それが正しいかどうかはわかりません..あなたはどう思いますか?

4

0 に答える 0