WallpaperManager 壁纸管理器

WallpaperManager (壁纸管理器) 是 Android 提供的用于管理壁纸的一个 API

WallpaperManager 方法

设置壁纸的相关方法

方法 说明
setBitmap(Bitmap bitmap) 将壁纸设置为 bitmap 所代表的位图
setResource(int resid) 将壁纸设置为 resid 资源所代表的图片
setStream(InputStream data) 将壁纸设置为 data 数据所代表的图片

其它方法

方法 说明
clear() 清除壁纸,设置回系统默认的壁纸
getDesiredMinimumHeight() 最小壁纸高度
getDesiredMinimumWidth() 最小壁纸宽度
getDrawable() 获得当前系统壁纸,如果没有设置壁纸,则返回系统默认壁纸
getWallpaperInfo() 假如当前壁纸是动态壁纸,返回动态壁纸信息
peekDrawable() 获得当前系统壁纸,如果没设置壁纸的话返回 null

获得 WallpaperManager 对象

WallpaperManager wpManager =WallpaperManager.getInstance(this);

设置壁纸需要的权限

<uses-permission android:name="android.permission.SET_WALLPAPER"/>

调用系统自带的壁纸选择功能

调用系统自带的壁纸选择功能很简单,就两行代码搞定

Intent it = new Intent(Intent.ACTION_SET_WALLPAPER);
startActivity(Intent.createChooser(it, "选择壁纸"));


  1. 创建一个 空的 Android 项目 cn.twle.android.SelectWallPaper

  2. 修改 activity_main.xml

    <?xml version="1.0" encoding="utf-8"?> 
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent" >
        <Button
            android:id="@+id/btn_set"
            android:layout_marginTop="100dp"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="修改壁纸"/>
    
    </LinearLayout>
    
  3. 修改 MainActivity.java

    package cn.twle.android.selectwallpaper;
    
    import android.content.Intent;
    import android.support.v7.app.AppCompatActivity;
    import android.os.Bundle;
    import android.view.View;
    import android.widget.Button;
    
    public class MainActivity extends AppCompatActivity {
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            Button btn_set = (Button) findViewById(R.id.btn_set);
            btn_set.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    Intent it = new Intent(Intent.ACTION_SET_WALLPAPER);
                    startActivity(Intent.createChooser(it, "选择壁纸"));
                }
            });
        }
    }
    

将 Activity 的背景设置为壁纸

将 Activity 的背景设置为壁纸的方法有两种

  1. 在 Activity 中用代码进行设置

    修改 onCreate() 方法

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        setTheme(android.R.style.Theme_Wallpaper_NoTitleBar_Fullscreen);
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }
    
  2. 在 AndroidManifest.xml 中修改 Activity 的主题

    <activity android:name=".MainActivity" 
        android:theme="@android:style/Theme.Wallpaper.NoTitleBar"/>
    

范例


  1. 复用上面的范例

  2. 修改 MainActivity.java

    package cn.twle.android.selectwallpaper;
    
    import android.support.v7.app.AppCompatActivity;
    import android.os.Bundle;
    
    public class MainActivity extends AppCompatActivity {
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            setTheme(android.R.style.Theme_Wallpaper_NoTitleBar_Fullscreen);
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
        }
    }
    

定时换壁纸

可以使用 AlarmManager(闹钟服务) 开发一个定时换壁纸


  1. 创建一个 空的 Android 项目 cn.twle.android.DynamicWallPaper

  2. 下载解压 /static/i/android/wallpaper_demo.zip 并把所有的图片拖到 res/drawable 目录

  3. 创建一个 Service MsWallPaperService.java 用于定时换壁纸

    package cn.twle.android.dynamicwallpaper;
    
    import android.app.Service;
    import android.app.WallpaperManager;
    import android.content.Intent;
    import android.os.IBinder;
    
    public class MsWallPaperService extends Service {
    
        // 当前壁纸下标
        private int current  = 0;
        private int[] papers = new int[]{
                R.drawable.w_1,
                R.drawable.w_2,
                R.drawable.w_3};
    
        // 定义 WallpaperManager 服务
        private WallpaperManager wm = null;
    
        @Override
        public void onCreate() {
            super.onCreate();
            wm = WallpaperManager.getInstance(this);
        }
    
        @Override
        public int onStartCommand(Intent intent, int flags, int startId) {
            if(current >= 4)
                current = 0;
    
            try{
                wm.setResource(papers[current++]);
            }catch(Exception e){e.printStackTrace();}
            return START_STICKY;
        }
    
        @Override
        public IBinder onBind(Intent intent) {
            return null;
        }
    }
    
  4. 修改 AndroidManifest.xml,添加设置壁纸的权限

    <uses-permission android:name="android.permission.SET_WALLPAPER" />
    

    对 Service 进行注册

    <service android:name=".MsWallPaperService"/>
    
  5. 修改 activity_main.xml 添加三个 Button

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">
    
        <Button
            android:id="@+id/btn_on"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="开启自动换壁纸" />
    
        <Button
            android:id="@+id/btn_off"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="关闭自动换壁纸" />
    
        <Button
            android:id="@+id/btn_clean"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="清除壁纸" />
    
    </LinearLayout>
    
  6. 修改 MainActivity.java 实例化 aManager 并设置定时事件

    package cn.twle.android.dynamicwallpaper;
    
    import android.app.AlarmManager;
    import android.app.PendingIntent;
    import android.app.WallpaperManager;
    import android.content.Intent;
    import android.support.v7.app.AppCompatActivity;
    import android.os.Bundle;
    import android.view.View;
    import android.widget.Button;
    import android.widget.Toast;
    
    import java.io.IOException;
    
    public class MainActivity extends AppCompatActivity implements View.OnClickListener {
    
        private Button btn_on;
        private Button btn_off;
        private Button btn_clean;
        private AlarmManager am;
        private PendingIntent pi;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            // 获得 AlarmManager 对象
            am = (AlarmManager) getSystemService(ALARM_SERVICE);
    
            // 指定要启动的 Service,并指明动作是 Servce
            Intent intent = new Intent(MainActivity.this, MsWallPaperService.class);
            pi = PendingIntent.getService(MainActivity.this, 0, intent, 0);
            bindViews();
        }
    
        private void bindViews() {
            btn_on = (Button) findViewById(R.id.btn_on);
            btn_off = (Button) findViewById(R.id.btn_off);
            btn_clean = (Button) findViewById(R.id.btn_clean);
            btn_on.setOnClickListener(this);
            btn_off.setOnClickListener(this);
            btn_clean.setOnClickListener(this);
        }
    
        @Override
        public void onClick(View v) {
            switch (v.getId()) {
                case R.id.btn_on:
                    am.setRepeating(AlarmManager.RTC_WAKEUP, 0, 2000, pi);
                    btn_on.setEnabled(false);
                    btn_off.setEnabled(true);
                    Toast.makeText(MainActivity.this, "自动更换壁纸设置成功", Toast.LENGTH_SHORT).show();
                    break;
                case R.id.btn_off:
                    btn_on.setEnabled(true);
                    btn_off.setEnabled(false);
                    am.cancel(pi);
                    break;
                case R.id.btn_clean:
                    try {
                        WallpaperManager.getInstance(getApplicationContext()).clear();
                        Toast.makeText(MainActivity.this, "清除壁纸成功~", Toast.LENGTH_SHORT).show();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                    break;
            }
        }
    }
    

参考文档

  1. 官方 API 文档 :WallpaperManager

Android 基础教程

关于   |   FAQ   |   我们的愿景   |   广告投放   |  博客

  简单教程,简单编程 - IT 入门首选站

Copyright © 2013-2022 简单教程 twle.cn All Rights Reserved.