首页 文章

如何在Lollipop中添加暂停/播放按钮进行通知?

提问于
浏览
3

我有服务播放收音机并创建通知 . 通知必须包含 Headers ,文字,时间和按钮(暂停/播放) . 我添加了剩余的东西,并显示通知 . 但我不确定如何在通知中添加按钮 . 在搜索时,我发现我可以使用RemoteView,RemoteControlClient和MediaStyles . 但是当媒体文件播放所有按钮(前一个,暂停,播放,后退)时,将使用RemoteControlClient和MediaStyles . 所以我真的很困惑 . 任何人都可以建议我,哪一个用于在Lollypop的通知中添加按钮 .

1 回答

  • 0

    首先你需要知道 addAction 在23 API中已弃用,请阅读this以进行关联

    调用 showNotification() 方法以显示通知

    private void showActionButtonsNotification() {
    
    
            Notification.Builder notif;
            NotificationManager nm;
            notif = new Notification.Builder(getApplicationContext());
            notif.setSmallIcon(R.mipmap.ic_launcher);
            notif.setContentTitle("Hi there!");
            notif.setContentText("This is even more text.");
            Uri path = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
            notif.setSound(path);
            nm = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
    
            Intent yesReceive = new Intent();
            yesReceive.setAction(MyNotificationReceiver.RESUME_ACTION);
            PendingIntent pendingIntentYes = PendingIntent.getBroadcast(this, MyNotificationReceiver.REQUEST_CODE_NOTIFICATION, yesReceive, PendingIntent.FLAG_UPDATE_CURRENT);
            notif.addAction(R.drawable.resume, "resume", pendingIntentYes);
    
    
            Intent yesReceive2 = new Intent();
            yesReceive2.setAction(MyNotificationReceiver.STOP_ACTION);
            PendingIntent pendingIntentYes2 = PendingIntent.getBroadcast(this, MyNotificationReceiver.REQUEST_CODE_NOTIFICATION, yesReceive2, PendingIntent.FLAG_UPDATE_CURRENT);
            notif.addAction(R.drawable.stop, "stop", pendingIntentYes2);
    
    
    
    
            Intent maybeReceive2 = new Intent();
            maybeReceive2.setAction(MyNotificationReceiver.CANCEL_ACTION);
            PendingIntent pendingIntentMaybe2 = PendingIntent.getBroadcast(this, MyNotificationReceiver.REQUEST_CODE_NOTIFICATION, maybeReceive2, PendingIntent.FLAG_UPDATE_CURRENT);
            notif.addAction(R.drawable.cancel, "cancel", pendingIntentMaybe2);
    
    
            assert nm != null;
            nm.notify(MyNotificationReceiver.REQUEST_CODE, notif.getNotification());
    
    
        }
    

    创建 MyNotificationReceiver 类以重新获得点击次数

    public class MyNotificationReceiver extends BroadcastReceiver {
            public static int REQUEST_CODE_NOTIFICATION = 1212;
            public static int REQUEST_CODE = 10;
            public static final String RESUME_ACTION = "RESUME_ACTION";
            public static final String STOP_ACTION = "STOP_ACTION";
            public static final String CANCEL_ACTION = "CANCEL_ACTION";
    
            @Override
            public void onReceive(Context context, Intent intent) {
                String action = intent.getAction();
    
                Log.e("action", action);
    
                if (intent.getAction() != null) {
                    switch (intent.getAction()) {
                        case RESUME_ACTION :
                            Toast.makeText(context, "resume", Toast.LENGTH_SHORT).show();
    // you resume action
                            break;
                        case STOP_ACTION :
                            Toast.makeText(context, "stop", Toast.LENGTH_SHORT).show();
    // you stop action
                            break;
                        case CANCEL_ACTION:
                            Toast.makeText(context, "cancel", Toast.LENGTH_SHORT).show();
    // you cancel action
                            break;
                    }
                }
            }
    
    
    
        }
    

    最后,将 receiver 添加到 manifests

    <receiver android:name=".MyNotificationReceiver">
                <intent-filter>
                    <action android:name="RESUME_ACTION"/>
                    <action android:name="STOP_ACTION"/>
                    <action android:name="CANCEL_ACTION"/>
    
                </intent-filter>
            </receiver>
    

相关问题