【问题标题】:Music Player like control buttons in Notification Panel音乐播放器,例如通知面板中的控制按钮
【发布时间】:2014-12-05 07:34:45
【问题描述】:

目前我有一个通知面板,它有三个按钮。一个用于打开活动,一个用于暂停上传,另一个用于恢复上传。

我希望暂停上传和恢复上传有一个按钮,例如 Google 音乐播放器中的暂停/播放按钮。

我使用this 回答构建通知面板。请推荐!

通知面板类:

public NotificationPanel(Context parent) {
// TODO Auto-generated constructor stub
this.parent = parent;
nBuilder = new NotificationCompat.Builder(parent)
.setContentTitle("Notification Title")
.setSmallIcon(R.drawable.logo)
.setOngoing(true);

remoteView = new RemoteViews(parent.getPackageName(), R.layout.notification_layout);   


//set the button listeners  

setListeners(remoteView);
nBuilder.setContent(remoteView);

nManager = (NotificationManager) parent.getSystemService(Context.NOTIFICATION_SERVICE);
nManager.notify(2, nBuilder.build());
}

public void setListeners(RemoteViews view){
Intent stopNotify = new Intent(parent,HelperActivity.class);
stopNotify.putExtra("DO", "stop");
PendingIntent btn1 = PendingIntent.getActivity(parent, 0, stopNotify, 0);
view.setOnClickPendingIntent(R.id.notifyStopButton, btn1); 

Intent pauseUpload = new Intent(parent,HelperActivity.class);
pauseUpload.putExtra("DO", "pause");    
PendingIntent btn2 = PendingIntent.getActivity(parent, 1, pauseUpload, 0);
view.setOnClickPendingIntent(R.id.uploadPauseButton, btn2); 

Intent resumeUpload = new Intent(parent,HelperActivity.class);
resumeUpload.putExtra("DO", "upload");  
PendingIntent btn3 = PendingIntent.getActivity(parent, 2, resumeUpload, 0);
view.setOnClickPendingIntent(R.id.uploadResumeButton, btn3); 

}

public void notificationCancel() {
     nManager.cancel(2);
}

【问题讨论】:

    标签: android android-notifications


    【解决方案1】:

    您应该使用一个计数器来确定按钮的状态。比如说:

    Status1=暂停上传方法,暂停上传图片 -活动点击- Status2= 恢复上传方法,恢复上传图片

    两种状态都在一个按钮上

    【讨论】:

    • 如何同时更改图片资源?我试过 view.setImageViewResource(viewId, srcId) 但它只改变一次。
    【解决方案2】:

    我知道这是一个较老的问题,但看到我也在解决这个问题,我想我会提供我的解决方案。对我来说,诀窍是找出何时更新按钮。事实证明,仅在暂停播放器后才执行此操作至关重要,因此我可以使用 isPlaying 布尔值来处理播放和切换图像。我不使用侦听器方法,因为我不想在仅控制播放时打开应用程序。这对我来说是这样的:

    class NotificationPanel {
    
        private static RemoteViews remoteView;
        private final Context ctxt;
        private final String title;
        private static NotificationManager nManager;
        private static Notification.Builder nBuilder;
    
        public NotificationPanel(Context ctxt, String title) {
            this.ctxt = ctxt;
            this.title = title;
    
            createNotification();
        }
    
        private void createNotification() {
            //Set up:
            // – remoteView and Notifciation
            // – notification manager and notification builder
    
            updateButton();
            updateNotification();
        }
    
        public static void updateButton() {
            int image;
            if (MainActivity.isPlaying) {// boolean registering if media is player
                image = android.R.drawable.ic_media_pause;
            } else {
                image =  android.R.drawable.ic_media_play;
            }
            remoteView.setImageViewResource(R.id.play_pause_bt, image);
        }
    
        public static void updateNotification() {
            nBuilder.setContent(remoteView);
            nManager.notify(Constants.NOTIFICATION_ID, nBuilder.build());
        }
    
        public static class NotificationReceiver extends BroadcastReceiver {
    
            private final MainActivity mainActivity;
            private IntentFilter intentFilter;
    
            public NotificationReceiver(MainActivity mainActivity) {
                this.mainActivity = mainActivity;
            }
    
            @Override
            public void onReceive(Context context, Intent intent) {
                if (intent != null) {
                    String action = intent.getAction();
                    assert action != null;
                    switch (action) {
                        case Constants.OPEN_APP:
                            break;
                        case Constants.ACTION_PAUSE_PLAY:
                            if (MainActivity.isPlaying) {
                                mainActivity.pausePlayback();
                            } else {
                                mainActivity.startPlayback();
                            }
                            updateButton();
                            updateNotification();
                    }
                }
            }
    
            //setup intent filters
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2014-06-20
      • 2021-11-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多