首页 > 解决方案 > 如何在执行后获得待处理意图的引用

问题描述

我目前正在尝试使用 android studio 制作警报应用程序,但在制作解除警报按钮时遇到了麻烦。

我将待处理意图的请求代码在创建时传递给我的警报类,该类继承了广播接收器,广播接收器再次将请求代码发送到新的活动警报页面,您可以在其中解除警报。并且使用这个请求代码我正在创建一个挂起的意图,我正在尝试使用这个挂起的意图取消警报,因为它应该是我创建的相同的挂起意图(它们具有相同的请求代码)

boolean result=databaseHelper.addAlarm(fh+":"+fm); 
int requestCode=databaseHelper.returnLastId();
AlarmManager alarmManager=(AlarmManager) getSystemService(Context.ALARM_SERVICE);
Intent i=new Intent(getApplicationContext(),Alarm.class);
i.putExtra("rc",requestCode);
PendingIntent pi = PendingIntent.getBroadcast(getApplicationContext(),requestCode,i,0);             alarmManager.setExact(AlarmManager.RTC_WAKEUP,calendar.getTimeInMillis(),pi);

int id=intent.getIntExtra("rc",-1);
 MediaPlayer mediaPlayer=MediaPlayer.create(context, Settings.System.DEFAULT_ALARM_ALERT_URI);
mediaPlayer.start();
Intent intent1=new Intent(context,AlarmPage.class);
intent1.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent1.putExtra("id",id);
context.startActivity(intent1);
        Intent intent=getIntent();
        id=intent.getIntExtra("id",-1);
        Log.d("ID",id+"");
        Button dismiss=(Button)findViewById(R.id.dismiss);
        dismiss.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Log.d("button","clicked");
                AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
                Intent i = new Intent(getApplicationContext(), Alarm.class);
                PendingIntent pi = (PendingIntent) PendingIntent.getBroadcast(getApplicationContext(), id, i, 0);
                alarmManager.cancel(pi);

            }
        });

按下关闭按钮后,我原以为警报会取消,但什么也没发生,警报一直在响。我最好的猜测是它可能会以某种方式创建一个新的待处理意图,但我的请求代码与我原来的待处理意图相同。

标签: javaandroidalarmmanagerandroid-pendingintent

解决方案


推荐阅读