Уведомление для музыкального проигрывателя Android

Как управлять музыкальным проигрывателем с помощью кнопок в уведомлении и как прослушивать действия кнопок в уведомлении


person Babin    schedule 19.02.2014    source источник
comment
Я понятия не имею об этом, но мне нужно использовать удаленный просмотр для этого. Пожалуйста, опубликуйте любой пример кода для этого   -  person Babin    schedule 19.02.2014
comment
Перейдите по ссылке ниже, и вы получите правильный ответ. [Полный код][1] [1]: stackoverflow.com/questions/12526228/   -  person Roadies    schedule 19.08.2014


Ответы (1)


Вы должны использовать setOnClickPendingIntent() RemoteViews для прослушивания действия кнопки из уведомления.

Метод setOnClickPendingIntent() привязывает PendingIntent к ответу на событие нажатия кнопки.

Пример кода выглядит следующим образом:

private void showControllerInNotification() {       
    PendingIntent pendingIntent = null;
    Intent intent = null;


    //Inflate a remote view with a layout which you want to display in the notification bar.
    if (mRemoteViews == null) {
        mRemoteViews = new RemoteViews(getPackageName(),
                R.layout.notification_control_bar);
    }   

    //Define what you want to do after clicked the button in notification.
    //Here we launcher a service by an action named "ACTION_STOP" which will stop the music play.
    intent = new Intent(ACTION_STOP);       
    pendingIntent = PendingIntent.getService(getApplicationContext(),
            REQUEST_CODE_STOP, intent,
            PendingIntent.FLAG_UPDATE_CURRENT);

    //In R.layout.notification_control_bar,there is a button view identified by bar_btn_stop
    //We bind a pendingIntent with this button view so when user click the button,it will excute the intent action.
    mRemoteViews.setOnClickPendingIntent(R.id.bar_btn_stop,
            pendingIntent);

    //Create the notification instance.
    mNotification = new NotificationCompat.Builder(getApplicationContext())
            .setSmallIcon(R.drawable.ic_launcher).setOngoing(true)
            .setWhen(System.currentTimeMillis())                
            .setContent(mRemoteViews)
            .build();

    //Show the notification in the notification bar.
    mNotifiManager.notify(NOTIFICATION_ID, mNotification);      
}   

обновление 1:

Служба, которая отвечает на действие, выглядит следующим образом:

public class MediaPlayerService extends Service {

    public static final String ACTION_STOP="xxx.yyy.zzz.ACTION_STOP";
    public static final String ACTION_PLAY="xxx.yyy.zzz.ACTION_PLAY";
    public static final String ACTION_PAUSE="xxx.yyy.zzz.ACTION_PAUSE";

@Override
public int onStartCommand(Intent intent, int flags, int startId) {
    if (intent != null) {
        String action = intent.getAction();         
        if (!TextUtils.isEmpty(action)) {
            if (action.equals(ACTION_PLAY)) {
                startPlay();
            }else if(action.equals(ACTION_PAUSE)) {
                pausePlay();
            }else if(action.equals(ACTION_STOP)) {
                stopPlay();
            }
        }
    }
    return super.onStartCommand(intent, flags, startId);
}
private void stopPlay(){
    // do the play work here
}
private void stopPause(){
    // do the pause work here
}
private void stopPlay(){
    // do the stop work here
}

}

Зарегистрируйте службу в манифесте:

    <service
        android:name="xxx.yyy.zzz.MusicPlayService"
        android:exported="false" >
        <intent-filter>
            <action android:name="xxx.yyy.zzz.ACTION_PLAY" />
            <action android:name="xxx.yyy.zzz.ACTION_PAUSE" />
            <action android:name="xxx.yyy.zzz.ACTION_STOP" />
            <category android:name="android.intent.category.DEFAULT" />
        </intent-filter>
    </service>

Для управления воспроизведением музыки вы можете скопировать некоторые полезные пакеты кода из здесь.

person Ricky    schedule 19.02.2014
comment
@AvatarQing дает мне предложение. Я создаю большое представление уведомлений, используя RemoteView для управления воспроизведением/паузой, как эта ссылка ( stackoverflow.com/questions/14508369/… ). Все правильно, но когда я нажимаю кнопку возврата устройства и выхожу из события щелчка приложения (воспроизведение/пауза/вперед /Закрыть) не работает. Пожалуйста, помогите мне. - person Helal Khan; 11.03.2014
comment
Вы использовали элементы управления воспроизведением/паузой в действии, а не в службе? - person Ricky; 17.03.2014
comment
не могли бы вы объяснить фильтр намерений в сервисе, пожалуйста? - person juztcode; 11.09.2020
comment
@juztcode это ваши пользовательские действия, которые вы можете определить - person Ricky; 11.09.2020
comment
@AvatarQing, это необязательно или обязательно? Я следил за учебниками, и они не были упомянуты - person juztcode; 12.09.2020
comment
@juztcode действие соответствует намерению, которое вы передаете PendingIntent.getService() , независимо от того, необходимо оно или нет, зависит от ваших потребностей. - person Ricky; 13.09.2020