[Из песочницы] Как назначить собственный метод для кнопки в уведомлении

habr.png

Создавая кнопки в уведомлении нельзя просто назначить им слушатели, как мы привыкли делать редактируя интерфейс пользователя. Основным способом назначения действий в уведомлении являются интенты (Intent) — намерения.

И если для того, чтобы назначить кнопке действия перехода в какую-либо Activity достаточно просто создать соответствующий интент, внутри которого и будет описано необходимое действие, а именно — откуда и куда переходим, то в нашем случае необходимо будет сделать следующее: назначить кнопке намерение, передать ему Action для работы с интент фильтром, создать BroadcastReciver, который будет вылавливать наш Intent и уже тогда выполнять необходимый нам метод.
Итак, для начала создадим наше уведомление. В своем примере я вынес все следующие действия в отдельный метод sendNotification. Но прежде нам необходимо создать строку, в которую мы запишем ключ для того, чтобы наш приемник мог отловить именно наш Intent. Так как множество приложений постоянно вбрасывают интенты в систему, этот ключ должен быть уникальным

//Создаем уникальный ключ
String BROADCAST_ACTION = "com.example.uniqueTag";

public void sendNotification () {
        NotificationManagerCompat notificationManager = NotificationManagerCompat.from(this);
        Intent intent = new Intent(BROADCAST_ACTION);
        //В следующей строке мы определяем кто именно будет обрабатывать наш Intent с помощью .getBroadcast
        PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 0, intentStopTrip, 0);
        //Создаем уведомление
        Notification BuilderNote =
                new NotificationCompat.Builder(this)
                        .setSmallIcon(R.drawable.ic_example)
                        .setContentTitle("Example title")
                        .setContentText("Example text")
                        .setContentIntent(pendingIntentPush)
                        //Далее мы создадим кнопку и присвоим ей наш pendingIntent
                        .addAction(R.mipmap.ic_example, "Button name", pendingIntent)
                        .build();
        //Установим необходимые флаги
        BuilderNote.flags |= Notification.FLAG_AUTO_CANCEL;

        notificationManager.notify(0, BuilderNote);
    }


Теперь необходимо создать приемник BroadCastReciver. Для этого необходимо щелкнуть ПКМ по вашей папке app→New→Other→BroadcastReciver. Далее дайте ему имя, и в открывшемся файле нам необходимо убрать заглушку в виде вброса исключения, написав на ее месте наш метод

public class ExampleReciver extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {
        exampleMethod();
    }
}


Но помимо этого нам необходимо настроить Intent Filter для нашего приемника, чтобы дать ему понять, какие именно Inetnt ему надо принимать. Для этого заходим в манифест и блоке кода нашего приемника прописываем Intent Filter, куда записываем содержимое строковой переменной BROADCAST_ACTION созданной в самом начале


            
                
            
        


Вот и все, теперь в случае нажатия на созданную нами кнопку в уведомлении будет запускаться метод, определенный в теле BroadcastReciver

© Habrahabr.ru