AlarmManager手机闹钟服务

来源:互联网 发布:阿沁淘宝店真假 编辑:程序博客网 时间:2024/05/01 16:16

一、简介

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"/>


原创粉丝点击