Как использовать 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);
Вы, ребята, знаете, что еще я мог попробовать? Используя то, что я объяснял выше, ничего не делает, появляется уведомление и имеет три кнопки действий, но щелчок по ним ничего не делает для меня.
В какой-то момент я подумал, может быть, если бы я добавил фильтры намерений с именами действий, но потом я подумал, что они все в одном пространстве имен, почему я должен?
Ответы
Ответ 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
где-нибудь, чтобы вы могли его отменить, когда деятельность или служба отключены.