0

私の質問はこれと同じ です。IntentService に実装された Android LocationLister は OnLocationChanged() メソッドを実行しませんが、残念ながら私はこれを理解できません。インテント サービス、onLocationChanged() メソッドが呼び出されることはありません。

さまざまな変数の値を追跡するために同じサービスに通知マネージャーの例も実装しているため、サービスの他の部分はうまく機能していますが、onLocationChanged() によって変更された変数は決して変更されず、メソッドが実行されていません。助けてください

4

2 に答える 2

2

IntentService は onLocationChangedListener を待機しません。IntentService の最後の部分が場所が変更されたリスナーの登録を解除することである場合、問題があります。

できることは、IntentService を通常の Service に変換することです。さまざまなアクションを確認してください。そのうちの 1 つは、新しい場所を受け取ったときの次のステップです。

すなわち

private class MyLocationListener implements LocationListener {
    public void onLocationChanged(Location location) {
        Intent intent = new Intent(this,MyService.class);
        intent.setAction("LOCATION_RECEIVED");
        intent.putExtra("locationUpdate",location);
        locationManager.removeUpdates(this);
        this.startService(intent);
    }
    public void onStatusChanged(String s, int i, Bundle bundle) {}
    public void onProviderEnabled(String s) {}
    public void onProviderDisabled(String s) {}
}

そしてあなたのサービスで...

@Override
public int onStartCommand(Intent intent, int flags, int startId) {
    if (intent!=null) {
        String action = intent.getAction();
            if (action!= null) {
                if (action.equals("LOCATION_RECEIVED")) {
                    Location location = null;
                    if (intent.hasExtra("locationUpdate")) {
                        location = intent.getExtras().getParcelable("locationUpdate");
                        //Process new location updates here
                    }

もう 1 つの方法は、LocationListener で Pending インテントを使用することですが、上記のコードと同じ効果になります。3 番目の方法は、OnLocationChangedListener から IntentService にランナブルを投稿することです (個人的にはこれを試していません)。

ここでいくつかのコードを共有していただければ幸いです。さらに質問がある場合は。サービスから場所を取得する同様のプロジェクトに取り組んでいるので、私は助けになるかもしれません.

于 2013-11-26T08:54:20.623 に答える
0

私が覚えている限りでは、ロケーション センサーは UI スレッドで実行する必要があります。アクティビティはそこで実行されますが、サービスはバックグラウンドで実行されます。

集中的なログ記録と例外処理をコードに追加して、確認してください。

これが理由なら、 を作成して登録する方法がありましたLooper。私に知らせてください、私は自分のコードを検索することができます

于 2013-10-26T08:30:43.113 に答える