如何在 Android 上实现通过另一个屏幕上的操作关闭的警报?

Posted

技术标签:

【中文标题】如何在 Android 上实现通过另一个屏幕上的操作关闭的警报?【英文标题】:How to implement an alarm on Android that turns off via an action on another screen? 【发布时间】:2011-12-06 18:47:07 【问题描述】:

我正在尝试创建一个 android 警报,该警报将在另一个屏幕上完成某个操作时关闭(即用户在数学问题中输入答案)。

我该怎么做:

    允许用户使用时间选择器在屏幕上设置每日闹钟 实现该警报 允许用户通过做数学题(或任何 其他操作)在另一个屏幕上

我尝试按照这个示例使用建议的解决方案:Unable to set alarm time in android

但它不播放铃声。我在下面添加了这个

Toast.makeText(BrainBuzzActivity.this, "Alarm has been set.", Toast.LENGTH_LONG).show();

Uri alert = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_ALARM);
if(alert == null)
     // alert is null, using backup
     alert = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
     if(alert == null)
        // alert backup is null, using 2nd backup
        alert = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_RINGTONE);               
     

原始主页(创建意图)

    public class BrainBuzzActivity extends Activity 
    
        private Button alarm = null;
        private AlarmManager alarmManager = null;
        Calendar cal = Calendar.getInstance();
        static final int DIALOG_TIME = 0;


alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
    alarm = (Button) findViewById(R.id.alarm);
    alarm.setOnClickListener(new View.OnClickListener()          
        public void onClick(View v) 
            showDialog(DIALOG_TIME);
        
    );


    protected Dialog onCreateDialog(int id) 
    Dialog dialog = null;
    switch(id)
    case DIALOG_TIME:
        dialog = new TimePickerDialog(this, new TimePickerDialog.OnTimeSetListener() 

            public void onTimeSet(TimePicker view, int hourOfDay, int minute) 
                Calendar c = Calendar.getInstance();
                c.setTimeInMillis(System.currentTimeMillis());
                // c.clear();
                //c.set(Calendar.YEAR, 2011);
                //c.set(Calendar.MONTH, 6);
                //c.set(Calendar.DAY_OF_MONTH, 4);
                c.set(Calendar.HOUR_OF_DAY, hourOfDay);
                c.set(Calendar.MINUTE, minute);
                c.set(Calendar.SECOND, 0);
                //c.set(Calendar.MILLISECOND, 0);
                Intent intent = new Intent(BrainBuzzActivity.this,AlarmReceiver.class);
                PendingIntent pi = PendingIntent.getBroadcast(BrainBuzzActivity.this, 0, intent, 0);
                alarmManager.set(AlarmManager.RTC_WAKEUP, c.getTimeInMillis(), pi);
                alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, c.getTimeInMillis(), AlarmManager.INTERVAL_FIFTEEN_MINUTES, pi);
                Toast.makeText(BrainBuzzActivity.this, "Alarm has been set.", Toast.LENGTH_LONG).show();

                Intent i = new Intent(BrainBuzzActivity.this, CloudCapture.class);
                startActivity(i);
            
        ,cal.get(Calendar.HOUR_OF_DAY),cal.get(Calendar.MINUTE),false);
        break;
    
    return dialog;

【问题讨论】:

【参考方案1】:

创建警报时,使用AlarmManager 方法

setInexactRepeating(int type, long triggerAtTime, long interval, PendingIntent operation)

这样您就可以计算现在和您希望它响起的时间之间的差异,然后指定直到每个后续警报的时长。

要取消警报,您必须创建一个与the documentation 中定义的种类相同的 PendingIntent

相同的操作、相同的 Intent 操作、数据、类别和组件,以及相同的标志

然后使用

cancel(PendingIntent operation)

【讨论】:

嗨,所以在我的主要活动中,PendingIntent 定义为 PendingIntent pi = PendingIntent.getBroadcast(MainPage.this, 0, intent, 0);如何取消其他班级?我试过 PendingIntent pi = PendingIntent.getBroadcast(MainPage.this, 0, intent, 0);取消(pi);很抱歉被 n00by... 您是如何创建intent 的?使用该代码编辑您的原始问题

以上是关于如何在 Android 上实现通过另一个屏幕上的操作关闭的警报?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Android TV 上实现 TvView?

如何在底部屏幕上实现可滚动选项卡

如何在APP上实现 一键关注微信公众账号

如何在android中实现长按屏幕?

如何在Android上实现FrameBuffer和Overlay的blend

Twitter 是如何在个人资料屏幕上实现粘性 UISegmentedControl 栏的? [关闭]