AlarmManager手机闹钟服务

来源:互联网 发布:阿沁淘宝店真假 编辑:程序博客网 时间:2024/06/09 15:32

一、简介

AlarmManager的本质是一个全局的定时器,AlramManager可在指定的时间或周期启动其他组件。


二、常用方法

1.set(int type,long triggerAtTime,PendingIntent operation):

设置在triggerAtTime时间启动用operation参数指定的组件。其中第一个指定了启动的服务类型。可选的参数如下:

ELAPSED_REALTIME:指定从现在开始时间过了一定时间后启动operation所对应的组件。

ELAPSED_REALTIME_WAKEUP:同上。只不过在系统关机时也可以启动operation所对应的组件。

RTC:指定当系统调用System.currentTimeMillis()方法返回值与TriggerAtTime相等时启动operation所对应的组件。

RTC_WAKEUP:同上,只不过系统关机也会执行operation所对应的组件

2.setInexactRepeating(int type,long triggerAtTime,long interval,PendingIntent operation):

设置一个非精确的周期性执行任务。

3.setRepeating(int type,long triggrtAtTime,long interval,PendingIntent operation):

设置一个周期性执行的任务。

4.cancel(PendingIntent operation):

取消定时服务。

三、设置闹钟

设置界面:

import java.util.Calendar;import android.app.Activity;import android.app.AlarmManager;import android.app.PendingIntent;import android.app.Service;import android.app.TimePickerDialog;import android.content.Intent;import android.os.Bundle;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.TimePicker;import android.widget.Toast;public class AlarmTest extends Activity{Button setTime;AlarmManager aManager;Calendar currentTime = Calendar.getInstance();@Overridepublic void onCreate(Bundle savedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.main);// 获取程序界面的按钮setTime = (Button) findViewById(R.id.setTime);// 获取AlarmManager对象aManager = (AlarmManager) getSystemService(Service.ALARM_SERVICE);// 为“设置闹铃”按钮绑定监听器。setTime.setOnClickListener(new OnClickListener(){@Overridepublic void onClick(View source){Calendar currentTime = Calendar.getInstance();// 创建一个TimePickerDialog实例,并把它显示出来。new TimePickerDialog(AlarmTest.this, 0, // 绑定监听器new TimePickerDialog.OnTimeSetListener(){@Overridepublic void onTimeSet(TimePicker tp,int hourOfDay, int minute){// 指定启动AlarmActivity组件Intent intent = new Intent(AlarmTest.this,AlarmActivity.class);// 创建PendingIntent对象PendingIntent pi = PendingIntent.getActivity(AlarmTest.this, 0, intent, 0);Calendar c = Calendar.getInstance();// 根据用户选择时间来设置Calendar对象c.set(Calendar.HOUR, hourOfDay);c.set(Calendar.MINUTE, minute);// 设置AlarmManager将在Calendar对应的时间启动指定组件aManager.set(AlarmManager.RTC_WAKEUP,c.getTimeInMillis(), pi);// 显示闹铃设置成功的提示信息Toast.makeText(AlarmTest.this, "闹铃设置成功啦", Toast.LENGTH_SHORT).show();}}, currentTime.get(Calendar.HOUR_OF_DAY), currentTime.get(Calendar.MINUTE), false).show();}});}}
闹钟界面:

import android.app.Activity;import android.app.AlertDialog;import android.content.DialogInterface;import android.content.DialogInterface.OnClickListener;import android.media.MediaPlayer;import android.os.Bundle;/** * Description: * <br/>网站: <a href="http://www.crazyit.org">疯狂Java联盟</a> * <br/>Copyright (C), 2001-2014, Yeeku.H.Lee * <br/>This program is protected by copyright laws. * <br/>Program Name: * <br/>Date: * @author  Yeeku.H.Lee kongyeeku@163.com * @version  1.0 */public class AlarmActivity extends Activity{MediaPlayer alarmMusic;@Overridepublic void onCreate(Bundle savedInstanceState){super.onCreate(savedInstanceState);// 加载指定音乐,并为之创建MediaPlayer对象alarmMusic = MediaPlayer.create(this, R.raw.alarm);alarmMusic.setLooping(true);// 播放音乐 alarmMusic.start();// 创建一个对话框new AlertDialog.Builder(AlarmActivity.this).setTitle("闹钟").setMessage("闹钟响了,Go!Go!Go!").setPositiveButton("确定", new OnClickListener(){@Overridepublic void onClick(DialogInterface dialog, int which){// 停止音乐alarmMusic.stop();// 结束该ActivityAlarmActivity.this.finish();}}).show();}}
关键的部分在于设置闹钟部分。aManager.set(AlarmManager.RTC_WAKEUP,c.getTimeInMillis(), pi);到点时准时通过一个AlertDialog来提醒用户。这样一个基本的闹钟服务就完成了。

四、定时更换壁纸

通过AlarmManager周期性的调用某个Service,从而实现更换壁纸的功能。

相关方法:

setBitmap(Bitmap bitmap):将壁纸设置bitmap所代表的位图。

setResource(int Resid):将壁纸设置resid所代表的图片

setStream(InputStream in):将壁纸设置in数据所代表的图片。

主界面:

import android.app.Activity;import android.app.AlarmManager;import android.app.PendingIntent;import android.app.Service;import android.content.Intent;import android.os.Bundle;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.Toast;public class AlarmChangeWallpaper extends Activity{// 定义AlarmManager对象AlarmManager aManager;Button start, stop;@Overridepublic void onCreate(Bundle savedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.main);start = (Button) findViewById(R.id.start);stop = (Button) findViewById(R.id.stop);aManager = (AlarmManager) getSystemService(Service.ALARM_SERVICE);// 指定启动ChangeService组件Intent intent = new Intent(AlarmChangeWallpaper.this,ChangeService.class);// 创建PendingIntent对象final PendingIntent pi = PendingIntent.getService(AlarmChangeWallpaper.this, 0, intent, 0);start.setOnClickListener(new OnClickListener(){@Overridepublic void onClick(View arg0){// 设置每隔5秒执行pi代表的组件一次aManager.setRepeating(AlarmManager.RTC_WAKEUP, 0, 5000, pi);start.setEnabled(false);stop.setEnabled(true);Toast.makeText(AlarmChangeWallpaper.this, "壁纸定时更换启动成功啦",Toast.LENGTH_SHORT).show();}});stop.setOnClickListener(new OnClickListener(){@Overridepublic void onClick(View arg0){start.setEnabled(true);stop.setEnabled(false);// 取消对pi的调度aManager.cancel(pi);}});}}
Service服务:

import android.app.Service;import android.app.WallpaperManager;import android.content.Intent;import android.os.IBinder;public class ChangeService extends Service{// 定义定时更换的壁纸资源int[] wallpapers = new int[]{R.drawable.shuangta,R.drawable.lijiang,R.drawable.qiao,R.drawable.shui};// 定义系统的壁纸管理服务WallpaperManager wManager;// 定义当前所显示的壁纸int current = 0;@Overridepublic int onStartCommand(Intent intent, int flags, int startId){// 如果到了最后一张,系统重新开始if(current >= 4)current = 0;try{// 改变壁纸wManager.setResource(wallpapers[current++]);}catch (Exception e){e.printStackTrace();}return START_STICKY;}@Overridepublic void onCreate(){super.onCreate();// 初始化WallpaperManagerwManager = WallpaperManager.getInstance(this);}@Overridepublic IBinder onBind(Intent intent){return null;}}

当然设置壁纸不只是用到AlarmManager服务的setRepeating()方法。还用到了壁纸管理服务WallpaperManager。通过WallpaperManager.getInstance()进行实例化,setResource()方法进行壁纸的更换。


记得在AndroidMainfest.xml文件中授予相应权限:

<user-permission android:name="android.permission.SET_WALLPAPER"/>


原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 不熟的表弟表妹向你借钱怎么办 开货车撞到人家房子了怎么办 坐骨被摔跤后好多年没好怎么办 自动挡汽车电子手刹刹车失灵怎么办 买家拍了不包邮的宝贝付款了怎么办 包邮快递买家不要了运费怎么办 舞蹈劈叉练出肌肉劈不下去怎么办 腰间盘突出压迫神经腿疼怎么办盘 绑定了我身份证的微信被盗了怎么办 用身份证办的手机卡不用了怎么办 平安陆金所交易密码忘了怎么办 陆金所密码交易密码忘记怎么办 带介指手指月肿了拿不下来怎么办 老公搞建筑的要长期在外地怎么办 媳妇跟婆婆吵架老公帮婆婆该怎么办 在家里礼佛香炉剩下的香头怎么办 精索曲张最近一打篮球就蛋疼怎么办 都两天了快递还是显示已发货怎么办 中通快递到达一天就是不派送怎么办 顺丰派送员把快递寄错了怎么办 顺丰快递把户籍卡弄丢了怎么办 金立手机不小心设置成英文了怎么办 三星手机不小心设置成英文了怎么办 手游方舟国际版渡渡鸟跟丢了怎么办 一打电话4g变2g怎么办 手机4g突然变2g怎么办 江湖风云录八卦门任务拒绝了怎么办 百度网盘下载时显示违规信息怎么办 在海马助手下载的游戏闪退怎么办 手机版百度云盘不能普通下载怎么办 手机版百度云盘一直加载中怎么办 登别人的网盘单同步通讯录了怎么办 被培训公司骗了贷款之后该怎么办 乐教乐学孩子登陆你那忘记了怎么办 脸擦破了痂掉了留斑怎么办 挤黑头后鼻子又红又疼怎么办 香奈儿邂逅清新淡香水不喷怎么办 脚面被压了肿起来了怎么办 每天加班很累反而失眠严重怎么办 减肥药吃了口臭嘴巴苦怎么办 上火引起的牙疼怎么办吃什么药