如何在通知操作上添加操作事件

时间:2017-11-13 05:58:06

标签: android notifications broadcastreceiver android-notifications alarm

我想停止媒体播放器并在点击停止通知操作时取消通知

这是我的闹钟功能

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


    }


}

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

1 个答案:

答案 0 :(得分:0)

您应该在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方法中你应该设置意图并调用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