前面介绍的时间服务的作用域都是应用程序,也就是说,将当前的应用程序关闭后,时间服务就会停止。但在很多时候,需要时间服务不依赖应用程序而存在。也就是说,虽然是应用程序启动的服务,但即使将应用程序关闭,服务仍然可以正常运行。
为了达到服务与应用程序独立的目的,需要获得AlarmManager对象。该对象需要通过如下代码获得:
AlarmManager alarmManager = (AlarmManager)
getSystemService(Context.ALARM_SERVICE);
AlarmManager类的一个非常重要的方法是setRepeating,通过该方法,可以设置执行时间间隔和相应的动作。setRepeating方法的定义如下:
public void setRepeating(int type, long triggerAtTime,
long interval, PendingIntent operation);
setRepeating方法有4个参数,这些参数的含义如下:
type:表示警报类型,一般可以取的值是AlarmManager.RTC和AlarmManager.RTC_WAKEUP。如果将type参数值设为AlarmManager.RTC,表示是一个正常的定时器,如果将type参数值设为AlarmManager.RTC_WAKEUP,除了有定时器的功能外,还会发出警报声(例如,响铃、震动)。
triggerAtTime:第1次运行时要等待的时间,也就是执行延迟时间,单位是毫秒。
interval:表示执行的时间间隔,单位是毫秒。
operation:一个PendingIntent对象,表示到时间后要执行的操作。PendingIntent与Intent类似,可以封装Activity、BroadcastReceiver和Service。但与Intent不同的是,PendingIntent可以脱离应用程序而存在。
从setRepeating方法的4个参数可以看出,使用setRepeating方法最重要的就是创建PendingIntent对象。例如,在下面的代码中用PendingIntent指定了一个Activity。
Intent intent = new Intent(this, MyActivity.class);
PendingIntent pendingActivityIntent = PendingIntent.
getActivity(this, 0,intent, 0);
在创建完PendingIntent对象后,就可以使用setRepeating方法设置定时器了,代码如下:
AlarmManager alarmManager = (AlarmManager)
getSystemService(Context.ALARM_SERVICE);
alarmManager.setRepeating(AlarmManager.RTC,
0, 5000, pendingActivityIntent);
执行上面的代码,即使应用程序关闭后,每隔5秒,系统仍然会显示MyActivity。如果要取消定时器,可以使用如下代码:
alarmManager.cancel(pendingActivityIntent);
运行本节的例子,界面如图8.20所示。单击【GetActivity】按钮,然后关闭当前应用程序,会发现系统5秒后会显示MyActivity。关闭MyActivity后,在5秒后仍然会再次显示MyActivity。
本节只介绍了如何用PendingIntent来指定Activity,读者在实例50和实例51中将会看到利用BroadcastReceiver和Service执行定时任务。
实例50:定时更换壁纸
工程目录:src\ch08\ch08_changewallpaper
使用AlarmManager可以实现很多有趣的功能。本例中将实现一个可以定时更换手机壁纸的程序。在编写代码之前,先来看一下如图8.21所示的效果。单击【定时更换壁纸】按钮后,手机的壁纸会每隔5秒变换一次。
本例使用Service来完成更换壁纸的工作,下面先编写一个Service类,代码如下:
package net.blogjava.mobile;
import java.io.InputStream;
import android.app.Service;
import android.content.Intent;
import android.os.IBinder;
public class ChangeWallpaperService extends Service
{
private static int index = 0;
// 保存res\raw目录中图像资源的ID
private int[] resIds = new int[]{ R.raw.wp1,
R.raw.wp2, R.raw.wp3, R.raw.wp4, R.raw.wp5};
@Override
public void onStart(Intent intent, int startId)
{
if(index == 5)
index = 0;
// 获得res\raw目录中图像资源的InputStream对象
InputStream inputStream = getResources().
openRawResource(resIds[index++]);
try
{
// 更换壁纸
setWallpaper(inputStream);
}
catch (Exception e)
{
}
super.onStart(intent, startId);
}
@Override
public void onCreate()
{
super.onCreate();
}
@Override
public IBinder onBind(Intent intent)
{
return null;
}
}
分享到:
相关推荐
全局定时器AlarmManager是Android系统中的一个重要组件,用于在特定的时间点或按照预定的时间间隔触发事件。这个功能在很多场景下都非常有用,例如定期更新应用数据、执行后台任务或者如描述中提到的定时更换壁纸。...
8.3.4 在线程中更新GUI组件 8.3.5 全局定时器AlarmManager(1) 8.3.5 全局定时器AlarmManager(2) 8.3.5 全局定时器AlarmManager(3) 8.4.1 什么是AIDL服务 8.4.2 建立AIDL服务的步骤(1) ...
1. JavaScript定时器基础: - `setTimeout()`: 这个函数用于在指定的毫秒数后调用一个函数或执行某段代码。它返回一个唯一的定时器ID,用于取消定时器。 - `clearTimeout()`: 使用这个函数可以取消由`setTimeout()...
比较常用的是AlarmManager全局定时器 去实现。 AlarmManager的使用机制有的称呼为全局定时器,有的称呼为闹钟。其实它的作用和Timer有点相似。都有两种相似的用法:(1)在指定时长后执行某项操作(2)周期性的执行...
AlarmManager实质是一个全局的定时器,是Android中常用的一种系统级别的提示服务,在指定时间或周期性启动其它组件(包括Activity,Service,BroadcastReceiver)。本文将讲解一下如何使用AlarmManager实现定时提醒...
综合上述,实现"Android定时器"功能,开发者需要根据实际需求选择合适的方法,如Handler、Timer、AlarmManager等,并结合WebView组件进行网页访问。同时,项目文件结构展示了Android Studio的工程组织方式,这有助于...
首先,AlarmManager实际上是一个全局的定时器,它的主要功能是设置在未来某一时间点或按照一定周期执行特定任务。它具有系统级别的特性,即使设备在休眠状态下,设定的闹钟依然可以唤醒设备执行任务。当然,如果设置...
8.3.5 全局定时器AlarmManager AlarmManager服务可以设置全局定时任务,即使应用退出,也能在预定时间触发广播或启动Service。 8.4.1 什么是AIDL服务 Android Interface Definition Language (AIDL)用于跨进程通信...
8.3.5 全局定时器 AlarmManager AlarmManager是全局定时服务,可以设置一次性或周期性的定时任务。它可以在设备休眠时仍然触发,适合用于长时间间隔的定时任务。 8.4 AIDL服务 8.4.1 什么是AIDL服务 Android ...
**8.3.5 全局定时器AlarmManager** AlarmManager是Android提供的全局定时服务,可以设置一次性或周期性的定时任务,即使应用被关闭,依然能够按照设定的时间触发事件。 **8.4.1 什么是AIDL服务** AIDL(Android ...
这个服务非常适合用来创建闹钟应用,或者作为全局定时器来实现后台任务的调度。在本文中,我们将深入探讨`AlarmManager`的工作原理、使用方法以及相关知识点。 ### 1. `AlarmManager`简介 `AlarmManager`是Android ...
**8.3.5 全局定时器AlarmManager** `AlarmManager`用于设置一次性或周期性的定时任务,例如定时提醒用户。 - **创建AlarmManager** ```java AlarmManager alarmManager = (AlarmManager) getSystemService...
`CHANGE_NETWORK_STATE`允许应用程序更改网络连接状态,而`WRITE_SETTINGS`则允许应用程序更改全局系统设置,包括开启飞行模式。 接下来,我们需要使用AlarmManager服务来设定定时任务。AlarmManager是Android提供...
1. 用户交互检测: Android系统提供了`UserActivity`接口,可以通过监听用户对设备的任何交互,如触摸屏幕、按键等,来判断用户是否活跃。通常,我们可以通过`Activity`类的`onUserInteraction()`方法来感知用户...
AlarmManager通常用来开发手机闹钟,并且它是一个全局定时器,可在指定时间或指定周期启动其他组件(包括Activity,Service,BroadcastReceiver) 获取AlarmManager对象: getSystemService(Service.ALARM_SERVICE) 调用...