ユーザーが通知をクリアしたときにサービスの変数をリセットしたい:それだけです!
周りを見回すと、誰もが私の通知に削除インテントを追加することを提案していることがわかりますが、インテントは、次のようなものが必要なときに、アクティビティやサービスを開始するために使用されます。
void onClearPressed(){
aVariable = 0;
}
この結果を得る方法は?
ユーザーが通知をクリアしたときにサービスの変数をリセットしたい:それだけです!
周りを見回すと、誰もが私の通知に削除インテントを追加することを提案していることがわかりますが、インテントは、次のようなものが必要なときに、アクティビティやサービスを開始するために使用されます。
void onClearPressed(){
aVariable = 0;
}
この結果を得る方法は?
通知はアプリによって管理されておらず、通知の表示やクリアなどのすべてが実際には別のプロセスで行われています。セキュリティ上の理由から、別のアプリにコードを直接実行させることはできません。
あなたの場合の唯一の可能性はPendingIntent
、通常のインテントをラップアラウンドし、通知がクリアされたときにアプリに代わって開始されるを提供することです。ブロードキャストの送信またはサービスの開始に使用PendingIntent
してから、ブロードキャストレシーバーまたはサービスで必要な処理を実行する必要があります。正確に何を使用するかは、通知を表示しているアプリケーションコンポーネントによって異なります。
ブロードキャストレシーバーの場合、ブロードキャストレシーバーの匿名内部クラスを作成し、通知を表示する前に動的に登録することができます。次のようになります。
public class NotificationHelper {
private static final String NOTIFICATION_DELETED_ACTION = "NOTIFICATION_DELETED";
private final BroadcastReceiver receiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
aVariable = 0; // Do what you want here
unregisterReceiver(this);
}
};
public void showNotification(Context ctx, String text) {
Intent intent = new Intent(NOTIFICATION_DELETED_ACTION);
PendingIntent pendintIntent = PendingIntent.getBroadcast(ctx, 0, intent, 0);
registerReceiver(receiver, new IntentFilter(NOTIFICATION_DELETED_ACTION));
Notification n = new Notification.Builder(mContext).
setContentText(text).
setDeleteIntent(pendintIntent).
build();
NotificationManager.notify(0, n);
}
}
アンドレイは正しいです。
次のような複数のメッセージを返したい場合:
これらの各応答フィルターを登録する必要があります。
public void showNotification(Context ctx, String text) ()
{
/… create intents and pending intents same format as Andrie did../
/… you could also set up the style of your message box etc. …/
//need to register each response filter
registerReceiver(receiver, new IntentFilter(CLICK_ACTION));
registerReceiver(receiver, new IntentFilter(USER_RESPONSE_ACTION));
registerReceiver(receiver, new IntentFilter(NOTIFICATION_DELETED_ACTION));
Notification n = new Notification.Builder(mContext)
.setContentText(text)
.setContentIntent(pendingIntent) //Click action
.setDeleteIntent(pendingCancelIntent) //Cancel/Deleted action
.addAction(R.drawable.icon, "Title", pendingActionIntent) //Response action
.build();
NotificationManager.notify(0, n);
}
次に、if、elseステートメント(Andreiが行ったように)、またはswitchステートメントを使用してさまざまな応答をキャッチできます。
注:私は主にこれをどこにも見つけられなかったためにこの応答を行い、自分でそれを理解する必要がありました。(おそらく私はそれをよりよく覚えているでしょう:-)楽しんでください!