Как удалить Уведомление, нажав на кнопку действия уведомления? - PullRequest
0 голосов
/ 11 апреля 2019

В настоящее время я работаю над приложением для 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();

1 Ответ

0 голосов
/ 11 апреля 2019

Где вы показываете детали уведомления.

int notifId = new Random().nextInt();
PendingIntent dismissIntent = NotificationActivity.getDismissIntent(notifId, context);
NotificationCompat.Builder builder = new NotificationCompat.Builder(context);
builder.setPriority(NotificationCompat.PRIORITY_MAX)
        .setDefaults(Notification.DEFAULT_ALL)
        .setSmallIcon(R.drawable.app_icon)
        .setContentTitle("Title")
        .setContentText("Content Text")
        .setAutoCancel(true)
        //You use addAction to include the dismiss button. The click action is to remove the notification. You can handle any action here as desired to function with the dismiss button.
        .addAction(R.drawable.ic_cancel, "Dismiss", dismissIntent);

NotificationManager notifManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);

notifManager.notify(notificationId, builder.build());
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...