使用AlarmManager来实现定时提醒,它提供了一种访问系统闹钟服务的方式。在全局中,达到设定的时间,
在它上面注册的一个Intent将会被广播,接着启动相应的应用程序,可以通过自定义Receiver来实现。
首先要在AndroidManifest.xml中进行注册
<receiver android:name=".AlarmReceiver"> <intent-filter> <action android:name="CLOCK" /> </intent-filter> </receiver>
自定义一个闹钟接收器,getIntExtra可用于接受发送方putExtra传过来的值,Intent i = new Intent(“CLOCK”)其中的“CLOCK”是注册时使用的seceiver的name。
public class AlarmReceiver extends BroadcastReceiver { private int _id; private String str; @Override public void onReceive(Context context, Intent intent) { _id = intent.getIntExtra("ID", -1); Intent i = new Intent("CLOCK"); i.setClass(context, NoteEditor.class); i.putExtra("ID", _id); String str = intent.getStringExtra("NOTE"); Toast.makeText( context, str, Toast.LENGTH_SHORT).show(); i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); context.startActivity(i); } }
时间的获取通过DatePickerDialog和TimePickerDialog,需要注意的是DatePickerDialog的月份是从0开始。将获取的数据放在Calendar类中,其中月份的存储也是从0开始。
final AlarmManager am = (AlarmManager) getSystemService(ALARM_SERVICE); Calendar alarmCalendar = Calendar.getInstance();
alarmCalendar.set(mYear, mMonth-1, mDay, mHour, mMinute,0); Intent i = new Intent("CLOCK"); i.setClass(this, AlarmReceiver.class); i.putExtra("ID", _id); String note="notes"; i.putExtra("NOTE",note);
设置一个PendingIntent对象作为闹钟响应的对象,发送广播。第二个参数可以为0,但是因为做的是一次性的闹钟,如果为0的话,新设的闹钟会将之前设的闹钟覆盖掉。FLAG_UPDATE_CURRENT: 如果希望获取的PendingIntent对象与已经存在的PendingIntent对象相比,如果只是Intent附加的数据不同, 那么当前存在的PendingIntent对象不会被取消,而是重新加载新的Intent附加的数据。
PendingIntent pi = PendingIntent.getBroadcast(this, _id,i,PendingIntent.FLAG_UPDATE_CURRENT);
发送闹钟请求,设置在alarmCalendar.getTimeInMillis()时间启动由pi指定的组件。
第一个参数用来指定定时服务的类型,主要可选以下值:
AlarmManager.ELAPSED_REALTIME:睡眠状态下不可用,该状态下闹钟使用相对时间。
AlarmManager.ELAPSED_REALTIME_WAKEUP:在睡眠状态下会唤醒系统并执行提示功能,也使用相对时间。
AlarmManager.RTC:该状态睡眠状态下不可用,使用绝对时间,即当前系统时间。
AlarmManager.RTC_WAKEUP:闹钟在睡眠状态下会唤醒系统并执行提示功能,该状态下闹钟也使用绝对时间。
am.set(AlarmManager.RTC_WAKEUP, alarmCalendar.getTimeInMillis(), pi);
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持小牛知识库。
我想我并不完全理解计时器和TimerTask在Java和Android中是如何工作的。现在,我定义了一些定期任务,在一个计时器内安排。 我想知道我应该使用单个计时器来安排任务,还是为每个任务使用不同的计时器实例?计时器有自己的线程吗?是否在新线程中执行计划的任务?背景中发生了什么? 这些方法有什么不同? 方法1的示例代码: 方法2的示例代码:
我对Android应用程序很陌生,所以我希望能在这里找到一些帮助。我已经在这里搜索了我的问题并找到了一些东西,但这不起作用。 我想向FrameLayout添加一个片段,但它不起作用。我的目标是创建一个框架(/框架?)这总是存在的,用户可以与它交互,在这个框架内的一个特定的“窗口”中,我想显示页面/片段,总共五个,并且能够随时切换页面/片段,所以我有一个始终存在的框架,在这个动态变化的页面内。但现在
我们以一个下面简单的FreeRADIUS配置来开始这一章 本机作为一个NAS设备(RADIUS客户端) Alice定义为一个测试用户. 在我们已经定义客户端和测试用户之后, 我们将会使用radtest程序来作为RADIUS客户端的角色并且测试Alice的authentication.
我试图创建一个简单的菜单,其中一个按钮将调用一个方法来清除数组。我不想使用xml,因为我只需要一个按钮。 像这样的东西- 非常感谢。
我有一个任务执行10秒,周期为1秒,没有延迟,另一个任务执行30秒,周期为5秒,当第一个任务完成时。 此外,我需要取消两个任务时,一个按钮被按下。 > 我尝试了基本线程,但将阻塞GUI,直到两个任务都执行 我尝试,但我这里是一个接一个地执行任务,但不是每个任务都定期执行 我尝试了预定的executor,但预定的executor是异步的,我知道如何使用 任何反馈都很感激。
问题内容: 我真的是使用Android的新手,所以让我感到困惑。我看了看似100篇教程以及有关如何从Android上的Web服务获取信息的示例,但是我需要的是对一个毫无头绪的人所需要的东西。以下是我没有得到的特别几点: 我不知道该如何处理XML文件。.意思是,一旦我完成Java工作,就是所有要做的事情吗?还是需要在XML文件中进行任何更改? 似乎我应该为其中一些教程创建一个新类,但是我不确定,如果