Android 壁纸设置 总结

看了很多大神的博客,从来没想过自己写,一直都觉得自己特别懒,哎,终于忍不住了,亲自动手我们能学到更多,闲话不多说,直接上思路:
目前总结了几种设置壁纸的方法:
(1)通过在onCreate()方法中设置activity的主题;
setTheme(android.R.style.Theme_Wallpaper_NoTitleBar_Fullscreen);
( 2 )通过在Android Mainifest.xml 文件中设置 ; android:theme=”@android:style/Theme.Wallpaper.NoTitleBar.Fullscreen”
( 3 )调用系统自带的壁纸选择功能,当然这里需要一个intent,表明自己选择壁纸的意图;
Intent intent = new Intent(Intent.ACTION_SET_WALLPAPER);
startActivity(Intent.createChooser(intent, “选择壁纸”));
(4)利用wallpaperManager,记得添加权限;

WallpaperManager wallpaperManager = WallpaperManager.getInstance(this);
或者 @SuppressLint(“ServiceCast”)
WallpaperManager manager =(WallpaperManager)getSystemService(WALLPAPER_SERVICE);
这里如果不添加这个@SuppressLint(“ServiceCast”)会有问题,暂不清楚为什么,可能是API版本问题吧,后续跟进

(5)动态加载壁纸
这个我参考别人的博客,也实现了,但是切换壁纸的速度太慢了,达不到自己的预期。后续改进
AlarmManager alarmManager =(AlarmManager)getSystemService(ALARM_SERVICE);
Intent serviceIntent = new Intent(MainActivity.this,SetWallpaperService.class);
PendingIntent pi =PendingIntent.getService(this, 0, serviceIntent, 0);
alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, 0, 1000, pi);

1. MainActivity.java

import android.annotation.SuppressLint;
import android.app.Activity;
import android.app.AlarmManager;
import android.app.PendingIntent;
import android.app.WallpaperManager;
import android.content.Intent;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;

import java.io.IOException;

public class MainActivity extends Activity implements View.OnClickListener{

private Button button1,button2,button3,button4;
private ImageView imageView;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    //设置壁纸为该activity主题,不需要设置权限,或者可以在androidManifest中设置theme
    //setTheme(android.R.style.Theme_Wallpaper_NoTitleBar_Fullscreen);
    //setTheme(android.R.style.Theme_Wallpaper_NoTitleBar);
    setContentView(R.layout.activity_main);
    button1 = (Button) findViewById(R.id.button1);
    button2 = (Button) findViewById(R.id.button2);
    button3 = (Button) findViewById(R.id.button3);
    button4 = (Button) findViewById(R.id.button4);
    button1.setOnClickListener(this);
    button2.setOnClickListener(this);
    button3.setOnClickListener(this);
    button4.setOnClickListener(this);
}

@Override
public void onClick(View view) {
    switch (view.getId()){
        case R.id.button1:
            //调用系统自带的壁纸选择功能,不需要添加权限
            Intent intent = new Intent(Intent.ACTION_SET_WALLPAPER);
            startActivity(Intent.createChooser(intent, "选择壁纸"));
            break;
        case R.id.button2:
            //利用WallpaparManager,添加权限set_wallpaper
            WallpaperManager wallpaperManager = WallpaperManager.getInstance(this);
            try {
                wallpaperManager.setBitmap(BitmapFactory.decodeResource(getResources(),R.drawable.fffg));
            } catch (IOException e) {
                e.printStackTrace();
            }

            //getSystemService(WALLPAPER_SERVICE)获取wallpaperManager会出问题
          /*  @SuppressLint("ServiceCast")
            WallpaperManager manager =(WallpaperManager)getSystemService(WALLPAPER_SERVICE);
            try {
                manager.setBitmap(BitmapFactory.decodeResource(getResources(),R.drawable.pic1));
            } catch (IOException e) {
                e.printStackTrace();
            }*/

            break;
        case R.id.button3:
            //动态加载壁纸,定时加载图片,需要AlarmManager
            AlarmManager alarmManager =(AlarmManager)getSystemService(ALARM_SERVICE);
            Intent serviceIntent = new Intent(MainActivity.this,SetWallpaperService.class);
            PendingIntent pi =PendingIntent.getService(this, 0, serviceIntent, 0);
            alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, 0, 1000, pi);

            /*//取消操作
            alarmManager.cancel(pi);
            //清除操作
            WallpaperManager manager =WallpaperManager.getInstance(this);
            try {
                manager.clear();
            } catch (IOException e) {
                e.printStackTrace();
            }*/

            break;
        default:
            break;
    }
}

}

2 AndroidManifest.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"
    android:orientation="vertical">


    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="调用系统选择手机壁纸"
        android:id="@+id/button1" />

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="利用WallpaparManager"
        android:id="@+id/button2" />

    <Button
        android:layout_width="207dp"
        android:layout_height="wrap_content"
        android:text="动态加载壁纸"
        android:id="@+id/button3" />

</LinearLayout>

4 SetWallpaperService.class

package tingting.com.mytest;

import android.app.Service;
import android.app.WallpaperManager;
import android.content.Intent;
import android.os.IBinder;

import java.io.IOException;

/**
 * Created on 2017/6/28.
 */
public class SetWallpaperService extends Service{
    private int current = 0;  //当前壁纸下标
    private int[] papers = new int[]{R.drawable.ffrhh, R.drawable.pic1,
                                        R.drawable.fffg, R.drawable.jjde};
    private WallpaperManager wManager = null;

    @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 {
           /* Bitmap bitmap =BitmapFactory.decodeResource(getResources(),papers[current]);
            wManager.setBitmap(bitmap);*/
            //切换第二张
            wManager.setResource(papers[current++]);
        } catch (IOException e) {
            e.printStackTrace();
        }
        return START_STICKY;
    }

    @Override
    public IBinder onBind(Intent intent) {
        return null;
    }
}
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值