WallpaperManager(Wallpaper Manager)


Pengenalan kepada bahagian ini:

Apa yang dibawa oleh bahagian ini kepada anda ialah WallpaperManager, seperti namanya, ia berkaitan dengan kertas dinding telefon mudah alih API Dalam bahagian ini kami akan menerangkan penggunaan asas WallpaperManager dan memanggil sistem itu sendiri Fungsi pemilihan kertas dinding, tetapkan latar belakang Aktiviti sebagai latar belakang kertas dinding, dan tulis contoh menukar kertas dinding dengan kerap~ Okey, tiada BB, mari mulakan bahagian ini~1.gif

Dokumen API Rasmi: WallpaperManager


1.WallpaperManager Penggunaan asas

Kaedah berkaitan

Kaedah berkaitan untuk menetapkan kertas dinding:

  • setBitmap(Peta bit peta bit): Tetapkan kertas dinding kepada peta bit yang mewakili Bitmap
  • setResource(int resid): Tetapkan kertas dinding kepada gambar yang diwakili oleh sumber resid
  • setStream(data InputStream): Tetapkan Kertas dinding ialah ditetapkan kepada gambar yang diwakili oleh data data

Kaedah lain:

  • kosongkan(): Kosongkan kertas dinding dan tetapkannya semula kepada sistem kertas dinding lalai
  • getDesiredMinimumHeight(): Ketinggian kertas dinding minimum
  • getDesiredMinimumWidth(): Lebar kertas dinding minimum
  • getDraw (): Dapatkan kertas dinding sistem semasa Jika tiada kertas dinding ditetapkan, kembalikan kertas dinding lalai sistem
  • getWallpaperInfo(): Tambah bahawa kertas dinding semasa ialah kertas dinding dinamik dan kembalikan. maklumat kertas dinding dinamik
  • peekDrawable(): Dapatkan kertas dinding sistem semasa, kembalikan null jika kertas dinding tidak ditetapkan

Dapatkan objek WallpaperManager

WallpaperManager wpManager =WallpaperManager.getInstance(this);

Kebenaran diperlukan untuk menetapkan kertas dinding



2 Panggil fungsi pemilihan kertas dinding sistem sendiri

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, "选择壁纸"));
        }
    });

Jalankan pemaparan:

<. 🎜>

2.gif


3 Terdapat dua cara untuk menetapkan latar belakang Aktiviti sebagai latar belakang kertas dinding

, satu ialah menetapkannya dengan kod dalam Aktiviti, dan yang lain ialah mengubah suainya dalam AndroidManifest.xml Tema aktiviti~!

3.gif

Kaedah 1: Tetapkan dalam Aktiviti:

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

Kaedah 2: Ubah suai tema dalam AndroidManifest.xml :

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


4. Demo menukar kertas dinding dengan kerap

Pengurus Penggera (perkhidmatan jam penggera) yang dipelajari sebelum ini digunakan di sini. Jika anda tidak tahu mengenainya, anda boleh ke :

10.5 AlarmManager (Perkhidmatan jam penggera)Kajian~ Mari tulis Demo~

Menjalankan pemaparan:

4.gif

Pelaksanaan kod:

Mula-mula, mari tulis Perkhidmatan yang menukar kertas dinding dengan kerap: 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;
    }
}

Kemudian kami membuat reka letak mudah dengan tiga Butang: 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>

Kemudian datang Aktiviti kami, di mana kami membuat instantiate aManager dan menyediakan acara yang dijadualkan~: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;
        }
    }
}

Akhir sekali jangan lupa untuk menetapkan Kebenaran kertas dinding dan pendaftaran untuk Perkhidmatan kami: AndroidManifest.xml:

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

Baiklah, sangat mudah~


5 Muat turun kod sampel dalam bahagian ini

WallpaperManagerDemo.zip


Ringkasan bahagian ini:

Baiklah, bahagian ini memperkenalkan anda kepada beberapa asas Penggunaan WallpaperManager ~ Anda masih perlu lebih banyak perkara sendiri Teroka~5.jpgTerima kasih~!