В настоящее время я работаю над приложением для Android, которое получает Push-уведомления. Теперь у отображаемых уведомлений обычно есть кнопка действия, которая должна выполнять действие, как показано в фрагменте кода ниже:
public class PushReceiver extends BroadcastReceiver implements RequestCallbacks {
private RequestHandler requestHandlerInstance;
private SessionHandler sessionHandlerInstance;
private Context context;
@Override
public void onReceive(Context context, Intent intent) {
this.context = context.getApplicationContext();
requestHandlerInstance = RequestHandler.getInstance(context);
sessionHandlerInstance = SessionHandler.getInstance(context);
String id = intent.getStringExtra("error_id");
requestHandlerInstance.startRequest(new RequestOperation(RequestOperation.Type.ERROR_TAKE_OVER, sessionHandlerInstance.getDeviceHash(), id), this);
}
#these are callbacks that will be executed
#when starRequest() returns a response
@Override
public void onSuccess(JSONObject json, String parsingKey) {
#request was successful
}
@Override
public void onError(VolleyError error, String parsingKey) {
#request failed, activating panic mode
}
@Override
public void onFinished(String parsingKey) {
#here i plan to dismiss the notification box,
#but this doesn't seem to be the correct approach
#as the box is still there
Intent intent = new Intent(Intent.ACTION_CLOSE_SYSTEM_DIALOGS);
context.sendBroadcast(intent);
}
}
У кого-нибудь есть правильное решение, как закрыть окно уведомлений? Ответ UI на событие onClick в настоящее время не требуется. Или мне нужно отправить новое намерение из службы MessagingService, которое как бы отменяет предыдущее уведомление?
Для большей ясности я создаю свое уведомление:
Notification notification;
Intent activityIntent = new Intent(this.getApplicationContext(), MainActivity.class);
activityIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
PendingIntent contentIntent = PendingIntent.getActivity(this.getApplicationContext(), REQUEST_CODE, activityIntent, PendingIntent.FLAG_ONE_SHOT);
Intent broadcastIntent = new Intent(this, PushReceiver.class);
broadcastIntent.putExtra("error_id", remoteMessage.getData().get("id"));
PendingIntent actionIntent = PendingIntent.getBroadcast(this, REQUEST_CODE, broadcastIntent, PendingIntent.FLAG_ONE_SHOT);
notification = new NotificationCompat.Builder(this, getString(R.string.default_notification_channel_id))
.setSmallIcon(R.mipmap.ic_launcher)
.setContentTitle(remoteMessage.getData().get("notification_title"))
.setContentText(remoteMessage.getData().get("notification_text"))
.setSound(settingsHandlerInstance.getRingtoneUri())
.setVibrate(settingsHandlerInstance.shouldVibrateOnPush() ? new long[] {0, 500, 200, 500, 0} : new long[] {0, 0, 0, 0, 0 })
.setPriority(NotificationCompat.PRIORITY_HIGH)
.setCategory(NotificationCompat.CATEGORY_MESSAGE)
.setContentIntent(contentIntent)
.addAction(R.mipmap.ic_launcher, "Übernehmen", actionIntent)
.setAutoCancel(true)
.build();