定期的に位置を更新するサービスを作成しています。しかし、次のコードを使用すると、私がスローされます:
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);
}
しかし、それが正しいかどうかはわかりません..あなたはどう思いますか?