it-swarm.com.ru

Как добавить кнопку для уведомлений в Android?

Мое приложение воспроизводит музыку, и когда пользователи открывают экран уведомлений, проведя пальцем сверху вниз по экрану (или, как правило, в правом нижнем углу экрана на планшетах), я хочу предоставить им кнопку, чтобы остановить воспроизводимую в настоящее время музыку и запустить ее снова, если они хотят.

Я не планирую помещать виджет на домашний экран пользователя, а просто в уведомления. Как я могу это сделать?

68
frankish

Добавить кнопку действия к уведомлению

Intent snoozeIntent = new Intent(this, MyBroadcastReceiver.class);
snoozeIntent.setAction(ACTION_SNOOZE);
snoozeIntent.putExtra(EXTRA_NOTIFICATION_ID, 0);
PendingIntent snoozePendingIntent =
        PendingIntent.getBroadcast(this, 0, snoozeIntent, 0);

NotificationCompat.Builder mBuilder = new 
NotificationCompat.Builder(this, CHANNEL_ID)
        .setSmallIcon(R.drawable.notification_icon)
        .setContentTitle("My notification")
        .setContentText("Hello World!")
        .setPriority(NotificationCompat.PRIORITY_DEFAULT)
        .setContentIntent(pendingIntent)
        .addAction(R.drawable.ic_snooze, getString(R.string.snooze),
                snoozePendingIntent);

Для получения дополнительной информации посетите https://developer.Android.com/training/notify-user/build-notification.html

5
labhya sharma
    // It shows buttons on lock screen (notification).

Notification notification = new Notification.Builder(context)
    .setVisibility(Notification.VISIBILITY_PUBLIC)
    .setSmallIcon(R.drawable.NotIcon)
    .addAction(R.drawable.ic_prev, "button1",ButtonOneScreen) 
    .addAction(R.drawable.ic_pause, "button2", ButtonTwoScreen)  
   .....
    .setStyle(new Notification.MediaStyle()
    .setShowActionsInCompactView(1)
    .setMediaSession(mMediaSession.getSessionToken())
    .setContentTitle("your choice")
    .setContentText("Again your choice")
    .setLargeIcon(buttonIcon)
    .build();

Пожалуйста, обратитесь к этому для более подробной информации Нажмите здесь

3
Chandsi Gupta

Вы можете создать намерение для действия (в этом случае прекратить играть) и добавить его в качестве кнопки действия в свое уведомление.

Intent snoozeIntent = new Intent(this, MyBroadcastReceiver.class);
snoozeIntent.setAction(ACTION_SNOOZE);
snoozeIntent.putExtra(EXTRA_NOTIFICATION_ID, 0);
PendingIntent snoozePendingIntent =
        PendingIntent.getBroadcast(this, 0, snoozeIntent, 0);

NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(this, CHANNEL_ID)
        .setSmallIcon(R.drawable.notification_icon)
        .setContentTitle("My notification")
        .setContentText("Hello World!")
        .setPriority(NotificationCompat.PRIORITY_DEFAULT)
        .setContentIntent(pendingIntent)
        .addAction(R.drawable.ic_snooze, getString(R.string.snooze),
                snoozePendingIntent);

Пожалуйста, обратитесь к документации Android здесь

3
Ruben Miquelino

Я постараюсь предоставить решение, которое я использовал, и большинство музыкальных проигрывателей также используют ту же технику для отображения элементов управления проигрывателя в панели уведомлений. 

У меня запущен сервис, который используется для управления Media Player и всеми его элементами управления. Деятельность Пользовательский элемент управления взаимодействует с Сервисом, отправляя, например, Интенты Сервису.

 Intent i = new Intent(MainActivity.this, MyRadioService.class);
        i.setAction(Constants.Player.ACTION_PAUSE);

        startService(i);

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

 @Override
public int onStartCommand(Intent intent, int flags, int startId) {


    if (intent.getAction().equals(Constants.Player.ACTION_PAUSE)) {
        if(mediaPlayer.isPlaying()) {
            pauseAudio();
        }
    }

Теперь для точного ответа на ваш вопрос показывать уведомление с игровыми элементами управления. Вы можете вызвать следующие методы, чтобы показать уведомление с элементами управления.

   //    showNotification
private void startAppInForeground() {
//  Start Service in Foreground

    // Using RemoteViews to bind custom layouts into Notification
    RemoteViews views = new RemoteViews(getPackageName(),
            R.layout.notification_status_bar);

// Define play control intent 
   Intent playIntent = new Intent(this, MyRadioService.class);
    playIntent.setAction(Constants.Player.ACTION_PLAY);

// Use the above play intent to set into PendingIntent
    PendingIntent pplayIntent = PendingIntent.getService(this, 0,
            playIntent, 0);

// binding play button from layout to pending play intent defined above 
views.setOnClickPendingIntent(R.id.status_bar_play, pplayIntent);
views.setImageViewResource(R.id.status_bar_play,
            R.drawable.status_bg);

Notification status = null;
 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
        status = new Notification.Builder(this).build();
    }

  status.flags = Notification.FLAG_ONGOING_EVENT;
    status.icon = R.mipmap.ic_launcher;
    status.contentIntent = pendingIntent;
    startForeground(Constants.FOREGROUND_SERVICE, status);

} Надеюсь, это действительно поможет вам. И вы сможете добиться того, что вы хотите. Счастливого кодирования :) 

0
Ankit Gupta