本程序通过AlarmManager周期性的调用某个Service ,从而让系统定时的更换壁纸的功能.更换壁纸的API 是WallPaperManager,它提供了 clear()方法来清除壁纸.还提供了如下方法来设置系统的壁纸.
- setBitmap(Bitmap bitmap): 将壁纸设置成bitmap代表的位图.
- setResource(int resid): 将壁纸设置为 resid资源代表的图片.
- setStream(InputStream data): 将壁纸设置为 data数据代表的图片.
该程序界面只有两个按钮,一个用于启动定时更换壁纸,另一个按钮用于关闭定时更换壁纸.
`package com.test.alarmmanager.changewallpaper;
import android.app.AlarmManager;
import android.app.PendingIntent;
import android.app.Service;
import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;
import com.test.alarmmanager.R;
/**
* 定时更换壁纸 AlarmManager
*/
public class AlarmChangeWallpaperActivity extends AppCompatActivity {
Button stop,start;
AlarmManager mManager;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_alarm_change_wallpaper);
mManager = (AlarmManager) getSystemService(Service.ALARM_SERVICE);
stop = (Button) findViewById(R.id.stop);
start = (Button) findViewById(R.id.start);
//指定启动的 CngeService 组件
Intent intent = new Intent(this,ChangeService.class);
//创建 PendingIntent 对象
final PendingIntent pi = PendingIntent.getService(this, 0, intent, 0);
start.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//每个3秒钟执行pi 代表的组件一次
mManager.setRepeating(AlarmManager.RTC_WAKEUP, 0, 3000, pi);
start.setEnabled(false);
stop.setEnabled(true);
Toast.makeText(AlarmChangeWallpaperActivity.this, "定时更换壁纸已启动成功", Toast.LENGTH_SHORT).show();
}
});
stop.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
start.setEnabled(true);
stop.setEnabled(false);
//取消对 pi 的调度
mManager.cancel(pi);
}
});
}
}
`
package com.test.alarmmanager.changewallpaper;
import android.app.Service;
import android.app.WallpaperManager;
import android.content.Intent;
import android.os.IBinder;
import com.test.alarmmanager.R;
import java.io.IOException;
/**
* 更换壁纸的组件
*/
public class ChangeService extends Service {
//定义定时更换的壁纸资源
int[] wallpapers = new int[]{R.mipmap.lijiang, R.mipmap.qiao, R.mipmap.shuangta, R.mipmap.shui};
//定义系统更换壁纸的管理服务
WallpaperManager wManager;
//定义当前显示的图片
int current = 0;
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
//如果到了最后一张就重新开始
if (current >= 4) {
current = 0;
}
//更换壁纸
try {
wManager.setResource(wallpapers[current++]);
} catch (IOException e) {
e.printStackTrace();
}
return START_STICKY;
}
@Override
public void onCreate() {
super.onCreate();
wManager = WallpaperManager.getInstance(this);
}
@Override
public IBinder onBind(Intent intent) {
return null;
}
}
另外在 AndroidManifest.xml 中加上 权限
<!--更换壁纸的权限-->
<uses-permission android:name="android.permission.SET_WALLPAPER"/>