WallpaperManager (Gestionnaire de fonds d'écran)


Introduction à cette section :

Ce que cette section vous apporte est WallpaperManager, comme son nom l'indique, elle est liée aux fonds d'écran des téléphones mobiles Une API. Dans cette section, nous décrirons l'utilisation de base de WallpaperManager et appellerons celle du système. Fonction de sélection de fond d'écran, définissez l'arrière-plan de l'activité comme arrière-plan de fond d'écran et écrivez un exemple de changement de fond d'écran régulièrement ~ D'accord, pas de BB, commençons cette section ~1.gif

Document officiel de l'API : WallpaperManager


1.WallpaperManager Utilisation de base

Méthodes associées

Méthodes associées pour définir le fond d'écran :

  • setBitmap(Bitmap bitmap) : définissez le fond d'écran sur ce que le bitmap représente Bitmap
  • setResource(int resid) : Définissez le fond d'écran sur l'image représentée par la ressource résiduelle
  • setStream(Données InputStream) : Définissez Le fond d'écran est définir l'image représentée par les données

Autres méthodes :

  • clear() : effacez le fond d'écran et rétablissez-le dans le système fond d'écran par défaut
  • getDesiredMinimumHeight() : hauteur minimale du fond d'écran
  • getDesiredMinimumWidth() : largeur minimale du fond d'écran
  • getDrawable () : Obtenez le fond d'écran actuel du système. Si aucun fond d'écran n'est défini, renvoyez le fond d'écran par défaut du système.
  • getWallpaperInfo() : Ajoutez que le fond d'écran actuel est un fond d'écran dynamique et retournez. les informations de fond d'écran dynamique
  • peekDrawable() : Obtenez le fond d'écran actuel du système, renvoie null si le fond d'écran n'est pas défini

Obtenez l'objet WallpaperManager

WallpaperManager wpManager =WallpaperManager.getInstance(this);

Autorisations requises pour définir le fond d'écran



2. Appelez la propre fonction de sélection de fond d'écran du système

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

Exécutez le rendu :

2.gif


3. Il existe deux façons de définir l'arrière-plan de l'activité comme arrière-plan du fond d'écran

, la première consiste à le définir avec du code dans l'activité, et l'autre est de le modifier dans AndroidManifest.xml Thème d'activité~!

3.gif

Méthode 1 : Définir dans l'activité :

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

Méthode 2 : Modifier le thème dans AndroidManifest.xml :

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

4. Démo de changement de fond d'écran régulièrement

Le AlarmManager (service de réveil) appris plus tôt est utilisé ici. Si vous ne le savez pas, vous pouvez y accéder. : 10.5 AlarmManager (Service de réveil)Étude~ Écrivons une démo ~

Exécution de rendus :

4.gif

Implémentation du code :

Tout d'abord, écrivons un service qui change régulièrement de fond d'écran : 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;
    }
}

Ensuite, nous réalisons une mise en page simple avec trois boutons : 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>

Vient ensuite notre activité, où nous instancions unManager et configurons des événements programmés~: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;
        }
    }
}

Enfin, n'oubliez pas de définir les autorisations du fond d'écran et inscription à notre service : AndroidManifest.xml :

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

D'accord, très simple~


5. Téléchargez l'exemple de code dans cette section

WallpaperManagerDemo.zip


Résumé de cette section :

D'accord, cette section vous présente quelques bases d'utilisation de WallpaperManager ~ Vous avez encore besoin plus de choses par toi-même Explorez~5.jpgMerci~!