2011-01-24 10 views
4

私のアプリケーションでは、SMSメッセージでキーワードを受信すると、電話機のGPS位置を追跡するサービスを開始します。私はこの使用して行う - 私はまた、SMSメッセージ内の別のキーワードを受信したときにサービスを停止できるようにする必要がありブロードキャスト受信者からリスナー&サービスを登録解除するには

context.startService(new Intent(context,TrackGPS.class)); 

、私はこれを行うにしようとしたが、GPSセンサーは、まだ場所とGPSアイコンが点滅を追跡します画面の上部。私はこれを使用しようとしました -

context.stopService(new Intent(context, TrackGPS.class)); 

これは、GPSリスナーを登録解除する必要があるかもしれないと考えられます。誰もがこのサービスを停止+テキストの受信時にGPSの追跡を停止取得に私を助けることができますか?前もって感謝します。

ソリューション

@Override 
public int onStartCommand(Intent GPSService, int flags, int startId) { 
    boolean startListening = GPSService.getExtras().getBoolean("IsStartTracking"); 
    if (startListening == true){ 
     lm = (LocationManager)getSystemService(Context.LOCATION_SERVICE); 
     lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, this); 
    } 
    else { 
     lm.removeUpdates(this); 
     stopSelf(); 
    } 
    return 1; 
} 

答えて

1

私はあなたの問題がサービスを停止しているとは思わないと思います。サービスを強制終了することで、まだ更新を探しているLocationListenerオブジェクトが強制終了されることはありません。

私は以下を行います。

サービスを停止して起動するのではなく、何かする必要があるたびにサービスを開始するだけです(聞き取りを開始する、または聞き取りをやめる)。

は、あなたが何をしたいあなたを伝えるために使用意図に何か余分を追加:あなたのサービスのごONSTARTメソッドのオーバーライドで

Intent GPSService = new Intent(context, TrackGPS.class); 
GPSService.putExtra("IsStartTracking", true); 
context.startService(GPSService); 

を、あなたは今の場所リスナーを登録し、登録解除することができます"IsStartTracking"の値に基づいたLocationManagerの単一インスタンス

boolean startListening = intent.getExtras().getBoolean("IsStartTracking"); 
+0

このメソッドを使いこなすと、あなたは伝説です!上記のコードは、onStartメソッドが推奨されていないため、上に掲載します。 – bobby123

0

、ときあなたがしてバインドされているクライアントを追跡するカウンタを作成することができ、あなたのサービスからTrackGPSサービスとAndroidのクラスが結合サービス、およびunbindを作成していると仮定最後のクライアントはアンバインドされ、リスナーはgpsにシャットダウンされます。

LocationListenerを登録している場合、サービスからバインドを解除する方法を知ることができます。 Service documentation

関連する問題