2011-01-29 22 views
0

こんにちは 私はちょっとした問題を抱えています。サービスからの通知を表示しようとしています。活動は、私はそうのようなSTARTSERVICEを呼び出す起動すると:サービスからのステータスバーの通知をAndroidで表示

 Intent myIntent = new Intent(getApplicationContext(),notif_service.class); 
     startService(myIntent); 

サービスは何かを計算し、通知を表示して停止する必要があります。コードは以下の通りである:

if (limit_time_value == 2 && start >= 6300000 && notif_past) 
    { 

     notif_past=false; 
     showNotification(); 
     stopSelf(); 

    } 

2つのこのサービスが停止することができる方法で、stopSelf(と自分自身からエーテル)、または問題があることである

  Intent myIntent = new Intent(getApplicationContext(),notif_service.class); 
     stopService(myIntent); 

と私の活動のボタンからがあります。サービスを停止しても、指定した時間が経過した後に通知が表示されます。私はそれをバインドし、通知を取り消してstopSelf()を再度呼び出すonDestroy()を呼び出すよりも、セッションを停止しようとしました。再び通知が表示されます。

私は間違っていますか?通知やサービスの仕組みを誤解していますか?

+0

サービスをキャンセルしてから、アプリケーション - >サービスの実行に進み、サービスがまだ実行中かどうかを確認してください。私はそれが愚痴です。 – user432209

+0

これは稼働していますが、サービスを停止して通知を表示しないでください。 – Simon

答えて

1

上記の2番目のコードスニペットに示されている作業を正確に実行しているとは示されません。

  • その仕事は、その仕事がメインアプリケーションスレッドで実行され、したがって、そのようなstopService()onDestroy()他のすべてのアプリケーションのメインスレッドの作業を、それをブロック開始すると、onStart()又はonStartCommand()に行われている場合。

  • 作成したバックグラウンドスレッドでその作業が行われている場合、そのバックグラウンドスレッドを終了しない限り、そのスレッドはサービスが破棄されているかどうかにかかわらず完了し続けます。自分でスレッドを終了するように手配しなければなりません。

+0

それはメインスレッドにあります。サービスとは別のスレッドではありません。私はstopSelf()のようなものを呼び出さない限り私は、アプリケーションを終了すると、サービスがまだ実行されているが。別のスレッドを使うべきですか?私は最初に保つだけでは単純ではない – Simon

+0

実際に私はちょうどあなたの2番目のポイントを読んで、それは問題ですので、私はサービスのonDestroy()のスレッドを終了します。どうもありがとう :) – Simon

1

showNotification()関数内で呼び出したNotificationManagerクラスのインスタンスを呼び出します。

たとえば、私が使用している:

NotificationManager nm=(NotificationManager)this.getSystemService(this.NOTIFICATION_SERVICE); 
nm.notify(1,builder.build()); 

を、あなたの通知を作成するには、このような何かを行っている場合は、cancel()関数を呼び出すと(この場合は1でnotificationIdを渡すことによって、それをキャンセルするために同じインスタンスを使用します)。例えば

nm.cancel(1); 

ここ1は、それを作成しながら、あなたが提供したnotificationIDを示しています。

関連する問題