您的位置:首页 > 移动开发 > Android开发

android 通过service 执行AlarmManager 自动更换壁纸

2015-04-14 17:12 190 查看
 自动更换壁纸是通过服务在后台进行的,所以 新建一个类继承service服务

先附上详细的解析代码:

package com.example.changebz;

import java.io.IOException;

import android.app.Service;

import android.app.WallpaperManager;

import android.content.Context;

import android.content.Intent;

import android.os.IBinder;

import android.widget.Toast;

public class ChangeService extends Service {

int[] wallpapers = new int[]{
R.drawable.a,
R.drawable.a074,
R.drawable.a076
};
//定义系统壁纸管理服务
WallpaperManager wm ;
int current=0;

@Override
public void onCreate() {
super.onCreate();
//初始化
wm = WallpaperManager.getInstance(ChangeService.this);

}

@Override
public int onStartCommand(Intent intent, int flags, int startId) {
//Toast.makeText(ChangeService.this, "服务启动", Toast.LENGTH_LONG).show();
if(current>2){
current = 0;
}
try {
wm.setResource(wallpapers[current++]);

} catch (IOException e) {
e.printStackTrace();
}

return START_STICKY;
}
@Override
public IBinder onBind(Intent arg0) {
return null;
}

}

然后在activity界面中启动服务:

这里启动服务的使用了

Intent intent = new Intent(MainActivity.this,ChangeService.class);

//创建pendingIntent对象

final PendingIntent pi = PendingIntent.getService(MainActivity.this, 0, intent, 0);

再通过AlarmManager来定时启动服务,具体MainActivity代码如下:

package com.example.changebz;

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.text.InputFilter.AllCaps;

import android.view.View;

import android.view.View.OnClickListener;

import android.widget.Button;

import android.widget.Toast;

public class MainActivity extends Activity {

private Button btn_start;

private Button btn_end;

private AlarmManager aMger;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btn_start = (Button) findViewById(R.id.btn_start);
btn_end = (Button) findViewById(R.id.btn_end);

aMger = (AlarmManager) getSystemService(Service.ALARM_SERVICE);

Intent intent = new Intent(MainActivity.this,ChangeService.class);

//创建pendingIntent对象
final PendingIntent pi = PendingIntent.getService(MainActivity.this, 0, intent, 0);

btn_start.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View arg0) {
//设置每隔5秒就执行pi代表的组件一次

aMger.setRepeating(AlarmManager.RTC_WAKEUP, 0, 5000, pi);
//设置按钮不可点击
btn_start.setEnabled(false);
btn_end.setEnabled(true);
Toast.makeText(MainActivity.this, "壁纸更换定时更换中", Toast.LENGTH_LONG).show();

}
});

btn_end.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View arg0) {
aMger.cancel(pi);//取消对pi的调度
btn_start.setEnabled(true);
btn_end.setEnabled(false);
}
});

}

}

完成这个功能主要是运用了AlarmManager对系统服务的管理,并且调用的PendingIntent 进行调度时间
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息