简体   繁体   English

如何在通知动作中添加动作事件

[英]how can i add action event on notification action

I want to stop mediaplayer and cancel the notification when i click on stop action of notification 当我单击通知的停止操作时,我想停止媒体播放器并取消通知

this is my alarm function 这是我的闹钟功能

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);


    }

this is my notification class broadcast receiver 这是我的通知类广播接收者

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());


    }


}

please can anyone help me on this I am newbie on this almost read the all previous posts related to this topic but not able to do this 请任何人都可以帮我这个忙,我是这个新手,几乎阅读了与此主题相关的所有以前的帖子,但无法做到这一点

you should use IntentService in AlarmNotificationReceiver class and handle mMediaPlayer object for stop , pause , play or anything else that you want to do ,the same as following code : 您应在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 
        }
    }

in onReceive method of AlarmNotificationReceiver you should set intent and call NotificationActionService 在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());

you can edit this solution according to what you need. 您可以根据需要编辑此解决方案。

i hope this solution be benefit for you. 我希望该解决方案对您有所帮助。

for more detail you can see this link 有关更多详细信息,请参见此链接

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM