Подтвердить что ты не робот

Как использовать Actions from Notification без начала действия

Итак, я работаю над простым музыкальным плеером. Музыкальный проигрыватель, как он называет состояния, может воспроизводить песню, приостанавливать воспроизведение, переходить к следующей песне, вернуться к предыдущей песне и полностью остановить воспроизведение. Когда вы воспроизводите песню, будет отображаться уведомление с именем исполнителя и названием песни; это уведомление также имеет три кнопки (Действия): Стоп, Пауза a Next.

У меня возникают проблемы с тем, что при нажатии на любое действие происходит управление воспроизведением, связанное с действием, и я не знаю, как это сделать. Я искал уведомление на Android: http://developer.android.com/guide/topics/ui/notifiers/notifications.html, но он не уточняет или не содержит слишком много информации об уведомлениях.

Вот пример простого действия (которое должно быть связано с кнопкой "Далее", нажмите на уведомление: Примечание:. Все приведенные ниже коды написаны в следующем пакете: com.deadpixels.light.player, и действие называется: PlayerActivity

public void nextSong() {
    if (position == songs.size() -1) {
        Toast.makeText(this, "No more songs on queue", Toast.LENGTH_SHORT).show();
        if(mPlayer.isPlaying()) {
            return;
        }
        else {
            buttonPlay.setImageResource(R.drawable.button_play);
        }
        return;
    }
    else {
        position++;
        playSong(songs.get(position));
    }
}

Вот что я пытался сделать:

Intent nextIntent = new Intent(KEY_NEXT);
PendingIntent nextPendingIntent = createPendingResult(0, nextIntent, 0);

Где действие для NextIntent:

public static final String KEY_NEXT = "com.deadpixels.light.player.PlayerActivity.nextSong";

а затем добавьте это в уведомление через addAction():

mBuilder.addAction(R.drawable.not_action_next, "Next", nextPendingIntent);

Вы, ребята, знаете, что еще я мог попробовать? Используя то, что я объяснял выше, ничего не делает, появляется уведомление и имеет три кнопки действий, но щелчок по ним ничего не делает для меня.

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

4b9b3361

Ответ 1

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

Intent nextIntent = new Intent(KEY_NEXT);
PendingIntent nextPendingIntent = PendingIntent.getBroadcast(this, 0, nextIntent, 0);

Затем зарегистрируйте BroadcastReceiver в вашем Activity:

IntentFilter filter = new IntentFilter();
filter.addAction(KEY_NEXT);
// Add other actions as needed

receiver = new BroadcastReceiver() {
    @Override
    public void onReceive(Context context, Intent intent) {
        if (intent.getAction().equals(KEY_NEXT)) {
            nextSong();
        } else if (...) {
            ...
        }
        ...
    }
}

registerReceiver(receiver, filter);

Если вы используете службу для управления фоновым воспроизведением, вам нужно зарегистрировать BroadcastReceiver в службе вместо активности. Обязательно сохраните экземпляр receiver где-нибудь, чтобы вы могли его отменить, когда деятельность или служба отключены.