AlarmManager学习之定时更换壁纸

这篇博客介绍了如何利用AlarmManager结合Service周期性地更换手机壁纸。通过WallPaperManager提供的API,可以设置Bitmap、资源ID或InputStream作为新的壁纸。程序界面包含启动和关闭定时更换壁纸的按钮。
摘要由CSDN通过智能技术生成

本程序通过AlarmManager周期性的调用某个Service ,从而让系统定时的更换壁纸的功能.更换壁纸的API 是WallPaperManager,它提供了 clear()方法来清除壁纸.还提供了如下方法来设置系统的壁纸.

  1. setBitmap(Bitmap bitmap): 将壁纸设置成bitmap代表的位图.
  2. setResource(int resid): 将壁纸设置为 resid资源代表的图片.
  3. 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"/>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值