Android(安卓)实现定时闹铃功能
16lz
2021-01-24
手机闹铃是生活中不可缺少的重要工具,闹铃功能俨然成为手机的标准配备,直接使用手机当做闹铃的人越来越多。
Android的手机也内置了Alarm Clock, Android API中提供了AlarmManager类,可以设置在指定的时间运行某些动作。
本文通过使用AlarmManager 的set()和setRepeating()两个方法实现了两种不同类型的闹铃,一次性闹铃和周期性闹铃,具体代码如下:
1)创建类CallAlarm.java作为自定的BroadcastReceiver,当闹铃的设置时间到时,BroadcastReceiver会被唤起,并运行onReceive()里面的程序,具体代码如下
package com.example.androidapp;import android.content.BroadcastReceiver;import android.content.Context;import android.content.Intent;import android.widget.Toast;public class CallAlarm extends BroadcastReceiver{@Overridepublic void onReceive(Context context, Intent intent){if(intent.getAction().equals("0")){Toast.makeText(context, "一次性闹铃", Toast.LENGTH_LONG).show();}else if(intent.getAction().equals("1")){Toast.makeText(context, "周期性闹铃", Toast.LENGTH_LONG).show();}else{}}}2)AndroidManifest.xml里面添加CallAlarm的receiver设置,让应用程序在一被启动时,就先注册这个Receiver,具体代码如下
<!-- 注册receiver CallAlarm --> <receiver android:name=".CallAlarm" android:process=":remote"></receiver>3)修改MainActivity.java实现设置(删除)一次性闹铃和周期性闹铃,具体代码如下
package com.example.androidapp;import java.util.Calendar;import android.os.Bundle;import android.os.SystemClock;import android.app.Activity;import android.app.AlarmManager;import android.app.PendingIntent;import android.content.Intent;import android.view.Menu;import android.view.View;import android.widget.Button;public class MainActivity extends Activity {private Calendar calendar=Calendar.getInstance();private Button button1=null;private Button button2=null;private Button button3=null;private Button button4=null;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);/*设置一次性闹铃*/button1=(Button)findViewById(R.id.button1);button1.setOnClickListener(new Button.OnClickListener() {@Overridepublic void onClick(View arg0) {/*设置一个5s后的时间*/calendar.setTimeInMillis(System.currentTimeMillis());calendar.add(Calendar.SECOND, 5);/*5s后跳转到CallAlarm.class*/Intent intent=new Intent(MainActivity.this,CallAlarm.class);intent.setAction("0");PendingIntent pendingIntent=PendingIntent.getBroadcast(MainActivity.this, 0, intent, 0);AlarmManager alarmManager=(AlarmManager)getSystemService(ALARM_SERVICE);alarmManager.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), pendingIntent);}});/*删除一次性闹铃*/button2=(Button)findViewById(R.id.button2);button2.setOnClickListener(new Button.OnClickListener() {@Overridepublic void onClick(View arg0) {/*取消Intent必须与启动Intent保持一致才能支持取消*/Intent intent=new Intent(MainActivity.this,CallAlarm.class);intent.setAction("0");PendingIntent pendingIntent=PendingIntent.getBroadcast(MainActivity.this, 0, intent, 0);AlarmManager alarmManager=(AlarmManager)getSystemService(ALARM_SERVICE);alarmManager.cancel(pendingIntent);}});/*设置周期性闹铃*/button3=(Button)findViewById(R.id.button3);button3.setOnClickListener(new Button.OnClickListener() {@Overridepublic void onClick(View v) {/*5s一个周期跳转到CallAlarm.class*/Intent intent=new Intent(MainActivity.this,CallAlarm.class);intent.setAction("1");PendingIntent pendingIntent=PendingIntent.getBroadcast(MainActivity.this, 0, intent, 0);AlarmManager alarmManager=(AlarmManager)getSystemService(ALARM_SERVICE);alarmManager.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, SystemClock.elapsedRealtime(), 5*1000, pendingIntent);}});/*删除周期性闹铃*/button4=(Button)findViewById(R.id.button4);button4.setOnClickListener(new Button.OnClickListener() {@Overridepublic void onClick(View v) {/*取消Intent必须与启动Intent保持一致才能支持取消*/Intent intent=new Intent(MainActivity.this,CallAlarm.class);intent.setAction("1");PendingIntent pendingIntent=PendingIntent.getBroadcast(MainActivity.this, 0, intent, 0);AlarmManager alarmManager=(AlarmManager)getSystemService(ALARM_SERVICE);alarmManager.cancel(pendingIntent);}});}@Overridepublic boolean onCreateOptionsMenu(Menu menu) {// Inflate the menu; this adds items to the action bar if it is present.getMenuInflater().inflate(R.menu.main, menu);return true;}}
更多相关文章
- 浅析Android(安卓)M新功能Adoptable Storage Devices(适配的存储
- 简单处理Android(安卓)65536方法越界问题
- Android中AnimationDrawable使用的简单实例
- android 开发规范
- 【Android】说做就做:都市列表+卫星地图
- JIN学习一、Android使用已有C/C++代码、第三方SO库的方法
- Android面试题-横竖屏切换,activity生命周期的执行顺序,基于8.0,9.
- 使用Vitamio打造自己的Android万能播放器(3)——本地播放(主界面、
- 给大家介绍几个常见的Android代码片段