【问题标题】:how can i add action event on notification action如何在通知操作上添加操作事件
【发布时间】:2017-11-13 05:58:05
【问题描述】:

当我点击通知的停止动作时,我想停止媒体播放器并取消通知

这是我的闹钟功能

public void alarmstart(String idd,int alarmmonth,int alarmyear,int alarmday,int alarmhour,int alarmmin)
    {
        AlarmManager manager = (AlarmManager)getSystemService(Context.ALARM_SERVICE);
        Intent myIntent;
        PendingIntent pendingIntent;

        myIntent = new Intent(Create.this,AlarmNotificationReceiver.class);
        myIntent.putExtra("title",tii);
        myIntent.putExtra("note",noo);
        myIntent.putExtra("id",id);
        pendingIntent = 
        PendingIntent.getBroadcast(this,Integer.valueOf(idd),myIntent,0);


        Calendar cal1=Calendar.getInstance();
        cal1.set(Calendar.MONTH,alarmmonth-1);
        cal1.set(Calendar.YEAR,alarmyear);
        cal1.set(Calendar.DAY_OF_MONTH,alarmday);

        cal1.set(Calendar.HOUR_OF_DAY,alarmhour);
        cal1.set(Calendar.MINUTE,alarmmin);
        cal1.set(Calendar.SECOND,0);

        manager.set(AlarmManager.RTC_WAKEUP,cal1.getTimeInMillis() ,pendingIntent);


    }

这是我的通知类广播接收器

public class AlarmNotificationReceiver extends BroadcastReceiver {

    MediaPlayer mMediaPlayer;
    PendingIntent pintent;
    static String id;



    @Override
    public void onReceive(Context context, Intent intent) {
        NotificationCompat.Builder builder = new NotificationCompat.Builder(context);

        String ti,no;
        ti=intent.getExtras().getString("title");
        no=intent.getExtras().getString("note");
        id=intent.getExtras().getString("id");



        builder.setAutoCancel(true)
                .setDefaults(Notification.DEFAULT_ALL)
                .setWhen(System.currentTimeMillis())
                .setSmallIcon(R.mipmap.ic_launcher)
                .setContentTitle(ti)
                .setContentText(no)
                .setDefaults(Notification.DEFAULT_LIGHTS | Notification.DEFAULT_SOUND)
                .addAction(new android.support.v4.app.NotificationCompat.Action(
                        R.mipmap.stop,
                        "Stop",
                        PendingIntent.getActivity(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT)))


                .setContentInfo("Info");
          mMediaPlayer = MediaPlayer.create(context, R.raw.teri);
         mMediaPlayer.start();

        NotificationManager notificationManager = (NotificationManager)context.getSystemService(Context.NOTIFICATION_SERVICE);
        notificationManager.notify(Integer.valueOf(id),builder.build());


    }


}

请任何人帮助我,我是新手,几乎阅读了与该主题相关的所有以前的帖子,但无法做到这一点

【问题讨论】:

    标签: android notifications broadcastreceiver android-notifications alarm


    【解决方案1】:

    您应该在 AlarmNotificationReceiver 类中使用 IntentService 并处理 mMediaPlayer 对象以进行停止、暂停、播放或其他任何您想做的事情,与以下代码相同:

      public static class NotificationActionService extends IntentService {
        public NotificationActionService() {
            super(NotificationActionService.class.getSimpleName());
        }
    
        @Override
        protected void onHandleIntent(Intent intent) {
            String action = intent.getAction();
    
            if ("StopSound".equals(action)) {
                // TODO: handle action StopSound.
               mMediaPlayer.stop();
                // If you want to cancel the notification: 
       NotificationManagerCompat.from(this).cancel(NOTIFICATION_ID);
       // NOTIFICATION_ID : you can (set and get) notificationid (to/from) intent 
            }
        }
    

    在AlarmNotificationReceiver的onReceive方法中,你应该设置intent并调用NotificationActionService

     Intent stopSoundIntent = new Intent(context, 
     NotificationActionService.class)
            .setAction("StopSound");
    
        PendingIntent stopSoundPendingIntent = PendingIntent.getService(context, 0,
                stopSoundIntent, PendingIntent.FLAG_ONE_SHOT);
    
        NotificationCompat.Builder notificationBuilder =
                new NotificationCompat.Builder(context)
                        .setSmallIcon(R.drawable.ic_launcher)
                        .setContentTitle("Sample Notification")
                        .setContentText("Notification text goes here")
                        .addAction(new NotificationCompat.Action(R.drawable.ic_launcher,
                                "StopSound", stopSoundPendingIntent));
    
        NotificationManagerCompat notificationManager = NotificationManagerCompat.from(context);
        notificationManager.notify(NOTIFICATION_ID, notificationBuilder.build());
    

    您可以根据需要编辑此解决方案。

    我希望这个解决方案对你有用。

    更多详情,您可以查看link

    【讨论】:

    • 感谢兄弟的帮助以及如何在点击通知时打开活动,有什么方法可以知道通知何时被清除,这样我也可以在通知清除时停止媒体播放器
    猜你喜欢
    • 2016-09-24
    • 2022-10-14
    • 1970-01-01
    • 1970-01-01
    • 2023-03-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多