如何在 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 上实现通过另一个屏幕上的操作关闭的警报?的主要内容,如果未能解决你的问题,请参考以下文章