1.静态壁纸(无须设置theme)
WallpaperManager manager =WallpaperManager.getInstance(this);
Drawable drawable=manager.getDrawable();
此时当drawable 就是我们获取的系统壁纸.在不设置theme 时,我们获取的是一整张壁纸,不能按照手机homescreen 的屏幕数去展示当前屏幕对应的已经剪裁的壁纸。设置android:theme=”@android:style/Theme.Wallpaper.NoTitleBar”
之后可以完美解决此问题。
2.动态壁纸
动态壁纸其实就是一个完整的app .目前了解到唯一一个展示动态壁纸的方法是:在展示壁纸的Activity中设置theme。
android:theme="@android:style/Theme.Wallpaper.NoTitleBar"
设置theme 之后的获取的动态壁纸的方法是:
WallpaperManager manager =WallpaperManager.getInstance(this);
Drawable drawable=manager.getDrawable();
判断是静态壁纸还是动态壁纸的方法
WallpaperManager manager =WallpaperManager.getInstance(this);
WallpaperInfo info = manager.getWallpaperInfo();
if (info == null) {//静态壁纸
} else {//动态壁纸
}
在activity 中展示动态壁纸的坑(设置theme之后)
若以以下这种方式
LinearLayout ll = new LinearLayout(this);
ll.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT));
setContentView(ll);
WallpaperManager manager = WallpaperManager.getInstance(this);
Drawable drawable=manager.getDrawable();
ll.setBackgroundDrawable(drawable);
无法展示动态壁纸。
正确展示壁纸的方式:
setContentView(R.layout.activity_use);
View view = View.inflate(this, R.layout.activity_use, null);
WallpaperManager manager = WallpaperManager.getInstance(this);
Drawable drawable=manager.getDrawable();
view .setBackgroundDrawable(drawable);
ps:两种展示方式造成了不同的结果,有人知晓的话,请告知。