WallpaperManager(壁紙管理器)


本節引言:

本節帶給大家的是WallpaperManager(壁紙管理器),如其名,就是手機壁紙相關的 一個API,在本節我們會描述下WallpaperManager的基本用法,呼叫系統自帶的 壁紙選擇功能,將Activity的背景設定為壁紙背景,以及寫一個定時換壁紙的範例~ 好了,不BB,開始本節內容~1.gif

官方API文檔WallpaperManager


1.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);

設定壁紙需要的權限



2.呼叫系統自帶的壁紙選擇功能

Button btn_set = (Button) findViewById(R.id.btn_set);
    btn_set.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent chooseIntent = new Intent(Intent.ACTION_SET_WALLPAPER);
            startActivity(Intent.createChooser(chooseIntent, "选择壁纸"));
        }
    });

#運行效果圖

2.gif


3.將Activity的背景設定為壁紙背景

方法有兩種,一種是在Activity中用程式碼進行設置,另一種是在AndroidManifest.xml中修改 Activity的主題~!

3.gif

方法一:在Activity中設定

@Override
protected void onCreate(Bundle savedInstanceState) {
    setTheme(android.R.style.Theme_Wallpaper_NoTitleBar_Fullscreen);
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
}

方法二:AndroidManifest.xml修改theme

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

4.定時換壁紙的Demo

這裡用到前面學的AlarmManager(鬧鐘服務),假如你對它不了解的話可以到:10.5 AlarmManager (鬧鐘服務)進行學習~ 下面我們來寫個Demo~

運行效果圖

4.gif

程式碼實作

首先我們來寫一個定時換壁紙的Service:WallPaperService.java

/**
 * Created by Jay on 2015/11/13 0013.
 */
public class WallPaperService extends Service {

    private int current = 0;  //当前壁纸下标
    private int[] papers = new int[]{R.mipmap.gui_1,R.mipmap.gui_2,R.mipmap.gui_3,R.mipmap.gui_4};
    private WallpaperManager wManager = null;   //定义WallpaperManager服务

    @Override
    public void onCreate() {
        super.onCreate();
        wManager = WallpaperManager.getInstance(this);
    }

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        if(current >= 4)current = 0;
        try{
            wManager.setResource(papers[current++]);
        }catch(Exception e){e.printStackTrace();}
        return START_STICKY;
    }

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

接著擼個簡單的佈局,三個Button:activity_main.xml# :

 <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>

接著是我們的Activity,在這裡實例化aManager並設定定時事件~:MainActivity.java

public class MainActivity extends AppCompatActivity implements View.OnClickListener {

    private Button btn_on;
    private Button btn_off;
    private Button btn_clean;
    private AlarmManager aManager;
    private PendingIntent pi;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //①获得AlarmManager对象:
        aManager = (AlarmManager) getSystemService(ALARM_SERVICE);
        //②指定要启动的Service,并指明动作是Servce:
        Intent intent = new Intent(MainActivity.this, WallPaperService.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:
                aManager.setRepeating(AlarmManager.RTC_WAKEUP, 0, 3000, 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);
                aManager.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;
        }
    }
}

最後別忘了加上設定壁紙的權限以及為我們的Service進行註冊:AndroidManifest.xml

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

好的,非常簡單~


##5.本節範例程式碼下載

WallpaperManagerDemo.zip


本節小結:

好的,本節為大家介紹了WallpaperManager的一些基本用法~更多的東西還需你們自己 進行探究~

謝謝~!5.jpg