Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> Android技術基礎 >> 10.9 WallpaperManager(壁紙管理器)

10.9 WallpaperManager(壁紙管理器)

編輯:Android技術基礎

本節引言:

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

官方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);

設置壁紙需要的權限

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

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, "選擇壁紙"));
        }
    });

運行效果圖


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

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

方法一: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~

運行效果圖

代碼實現

首先我們來寫一個定時換壁紙的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的一些基本用法~更多的東西還需你們自己 進行探究~謝謝~!

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved