您的位置:首页 > 其它

AlarmManager学习之定时更换壁纸

2016-07-01 09:47 330 查看
本程序通过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"/>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  位图 AlarmManag