2012-02-11 16 views
10

私は次のような動作を望みます: ユーザーが通知をクリックし、Androidがサービスを停止しました。ユーザーが通知をクリックしたときにサービスを停止する簡単な方法はありますか?

問題は、サービスを停止するにはstopServiceを呼び出す必要があり、それを行うPendingIntentを簡単に作成できないということです。

これを行うために私が見つけた唯一の方法は、サービスがstopSelfを呼び出して停止するように特別なIntentを余分に受け取ることです。

通知クリックからサービスを直接キャンセルする簡単な方法はありますか?

答えて

6

stopService()コールを行う単純なBroadcastReceiverを作成し、getBroadcast()PendingIntentを使用してトリガーすることができます。そのBroadcastReceiverServiceによってマニフェストまたはregisterReceiver()経由で登録することができます(後者の場合はstopService()ではなくstopSelf()となります)。

これはおそらくあなたの持っているものより単純ではないでしょう。からstopService()コールを直接トリガーする方法はありません。

+0

私は長い時間のためにこれを使用しましたが、これはもう動作しません。 Android L(5.0)以降、ユーザがrecentsリストのアプリをスワイプしてAndroidにメインタスクを終了させて​​サービスを再起動させると、DeadObjectExceptionが発生します(あるUIを持つローカルサービスがある場合スワイプアウト) – gnobal

+2

@gnobal: 'DeadObjectException'は、AFAIKのバインディングを通じてのみ発生します。この解決法は結合を必要としない。 – CommonsWare

+0

どちらも私のことをしません。私はstartServiceを使っています。しかし、私はこれを示すために小さな例を提供するのが面倒だから、うまく機能しないのは私のアプリだと信じています。いずれにせよ、私はあなたが提供した別のソリューションに切り替えました:http://stackoverflow.com/a/11145822/7748 :) – gnobal

13

ありがとうCommonsWare。

興味のある人のためのあなたのソリューションの簡単な図解です。

コードはサービスクラスにあります。

// Create Notification 
private void initNotification() {  
    //Register a receiver to stop Service 
    registerReceiver(stopServiceReceiver, new IntentFilter("myFilter")); 
    PendingIntent contentIntent = PendingIntent.getBroadcast(this, 0, new Intent("myFilter"), PendingIntent.FLAG_UPDATE_CURRENT); 
    notification.setLatestEventInfo(context, contentTitle, contentText,contentIntent); 
    mNotificationManager.notify(NOTIFICATION_ID,notification); 
... 
} 



//We need to declare the receiver with onReceive function as below 
protected BroadcastReceiver stopServiceReceiver = new BroadcastReceiver() { 
    @Override 
    public void onReceive(Context context, Intent intent) { 
    stopSelf(); 
    } 
}; 
+4

レシーバーは「登録されていない」必要がありますか? – MobileMon

+0

@MobileMon、はい、 'stopSelf()'の前にする必要があります –

+0

私はおおよそあなたのコードに基づいていますが、動作していません。http://stackoverflow.com/questions/39956088/not-receiving-notification- Click-in-Service – Alex

関連する問題