Есть ли кнопка паузы и воспроизведения уведомлений моего музыкального проигрывателя, которая не работает, но музыка останавливается и воспроизводится в основной деятельности

Я создаю музыкальный проигрыватель. Все функции работают нормально, но моя панель уведомлений Кнопка «Воспроизведение и пауза» не меняется, когда я нажимаю кнопку паузы в уведомлении, но музыка останавливается, а также снова нажимаю кнопку паузы уведомления, а затем также запускаю музыку, но не меняю кнопку

Код уведомления

public static void  customBigNotification(Context context, String sname){


    RemoteViews expandView=new RemoteViews(context.getPackageName(), R.layout.status_bar_expanded);
    expandView.setTextViewText(R.id.status_bar_track_name,sname);

    NotificationCompat.Builder nc=new NotificationCompat.Builder(context,CHANNEL_ID);
    NotificationManager nm=(NotificationManager)context.getSystemService(Context.NOTIFICATION_SERVICE);

    Intent notifyIntent=new Intent(context,Player.class);
    notifyIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK|Intent.FLAG_ACTIVITY_NEW_TASK);
    PendingIntent pendingIntent=PendingIntent.getActivity(context, 0, notifyIntent, 0);
    nc.setContentIntent(pendingIntent);
    nc.setSmallIcon(R.drawable.apollo_holo_dark_play);
    nc.setAutoCancel(true);
    nc.setPriority(NotificationCompat.PRIORITY_MAX);
    nc.setOnlyAlertOnce(true);
    nc.setDefaults(NotificationCompat.PRIORITY_MAX);
    nc.setVibrate(new long[]{00});

    nc.setContentTitle("Music Player");
    nc.setContentText("Audio Control");
    //nc.addAction(R.drawable.ic_pause_status,"pause",pendingIntent);

    //nc.setStyle(new NotificationCompat.DecoratedCustomViewStyle());
    nc.setCustomBigContentView(expandView);



    setListners(expandView,context);
    nm.notify(NOTIFICATION_ID_OPEN_ACTIVITY,nc.build());


}

private static void setListners(RemoteViews view,Context context){
    Intent previous=new Intent(NOTIFY_PREVIOUS);
    Intent next=new Intent(NOTIFY_NEXT);
    Intent play=new Intent(NOTIFY_PLAY);
    Intent pause=new Intent(NOTIFY_PAUSE);


    PendingIntent pPrevious=PendingIntent.getBroadcast(context, 0, previous, PendingIntent.FLAG_UPDATE_CURRENT);
    view.setOnClickPendingIntent(R.id.status_bar_prev,pPrevious);
    view.setViewVisibility(R.id.status_bar_play, 1);



    PendingIntent pNext=PendingIntent.getBroadcast(context,0,next,PendingIntent.FLAG_UPDATE_CURRENT);
    view.setOnClickPendingIntent(R.id.status_bar_next,pNext);


    PendingIntent pPause=PendingIntent.getBroadcast(context,0,pause,PendingIntent.FLAG_UPDATE_CURRENT);
    //view.setImageViewResource(R.id.status_bar_play,R.id.status_bar_play);

    view.setOnClickPendingIntent(R.id.status_bar_pause,pPause);
    view.setImageViewResource(R.id.status_bar_pause,R.drawable.ic_play_status);
    view.setViewVisibility(R.id.status_bar_pause,View.GONE);
    //view.setViewVisibility(R.id.status_bar_pause,View.VISIBLE);
   //view.setViewVisibility(R.id.status_bar_play,View.GONE);

    PendingIntent pPlay=PendingIntent.getBroadcast(context,1,play,PendingIntent.FLAG_UPDATE_CURRENT);
    view.setOnClickPendingIntent(R.id.status_bar_play,pPlay);
    view.setViewVisibility(R.id.status_bar_play,View.VISIBLE);


    //view.setViewVisibility(R.id.status_bar_prev,View.VISIBLE);


}

Класс NotificationReceiver

public class NotificationReceiver extends BroadcastReceiver {
 @Override
public void onReceive(Context context, Intent intent) {

   NotificationManager manger=(NotificationManager)context.getSystemService(context.NOTIFICATION_SERVICE);



   if(intent.getAction().equals(NotificationGenerator.NOTIFY_PLAY)){

       Intent playintent=new Intent();
       playintent.setAction("play");
       playintent.putExtra("playing",NotificationGenerator.NOTIFY_PLAY);
       context.sendBroadcast(playintent);

   }
   else if(intent.getAction().equals(NotificationGenerator.NOTIFY_PAUSE)) {
       Toast.makeText(context, "Pause", Toast.LENGTH_LONG).show();


   }else if(intent.getAction().equals(NotificationGenerator.NOTIFY_NEXT)) {

       Intent nextintent=new Intent();
       nextintent.setAction("next");
       nextintent.putExtra("nexting",NotificationGenerator.NOTIFY_NEXT);
       context.sendBroadcast(nextintent);
   }else if(intent.getAction().equals(NotificationGenerator.NOTIFY_PREVIOUS)) {
       Toast.makeText(context, "Previous", Toast.LENGTH_LONG).show();
   }
}

}

Класс Player.java

IntentFilter filter=new IntentFilter();

    filter.addAction("play");
    //filternext.addAction("next");
    reciver= new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {
                if(intent !=null){
                   // if(intent.getStringExtra("play").equals("play")){
                        play();


                    remoteViews.setImageViewResource(R.drawable.ic_play_status,R.drawable.ic_pause_status);
                    remoteViews.setViewVisibility(R.id.status_bar_play,View.VISIBLE);

                }



        }
    };

    registerReceiver(reciver,filter);
    IntentFilter filternext=new IntentFilter();
    filternext.addAction("next");
    reciver=new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {
            if(intent!=null){
                next();
            }
        }
    };
    registerReceiver(reciver,filternext);

это мой код воспроизведения и паузы, но в панели уведомлений не меняется значок кнопки воспроизведения и паузы


person Akash    schedule 19.11.2019    source источник
comment
Я рекомендую помещать логи для каждого широковещательного приемника внутрь метода onReceive с именем широковещательного приемника и действием из намерения. после этого вы можете сузить проблему до определенного места в вашем коде. сделайте это и поделитесь результатом.   -  person CmTiger    schedule 19.11.2019
comment
все работает нормально, но когда я нажимаю кнопку уведомления о паузе, кнопка воспроизведения не меняется @cmTiger   -  person Akash    schedule 19.11.2019


Ответы (1)


Теперь я понимаю проблему, вы не можете повлиять на уведомление, просто сделав это

remoteViews.setImageViewResource(R.drawable.ic_play_status,R.drawable.ic_pause_status);
remoteViews.setViewVisibility(R.id.status_bar_play,View.VISIBLE);

Вам нужно снова создать уведомление: Обновить уведомление

person CmTiger    schedule 22.11.2019