通过壁纸修改launcher桌面背景


在使用一些launcher的时候发现有些apk有更改桌面背景的选项,通过查看源代码得知,所谓更换桌面背景,实际上是设置壁纸,然后通过获取当前壁纸来改变桌面背景。

这样做的好处是避免自己存储当前桌面背景的信息,同时可以通过接受壁纸更改的广播,实时的修改当前桌面的背景。

关于如何设置壁纸,网络上有很多文章对此有过讲解,在我分析的这个apk里,使用以下代码更改壁纸:

            InputStream stream = getResources().openRawResource(R.drawable.background);
            setWallpaper(stream);

当然,也可以调用系统的设置壁纸的函数来更改壁纸:

	private void setWallpaper() {
		final Intent pickWallpaper = new Intent(Intent.ACTION_SET_WALLPAPER);
		startActivity(Intent.createChooser(pickWallpaper, "Wallpaper"));
	}

更改壁纸完毕后,可以获得当然默认的壁纸来修改当前apk的背景了:

	private void setBackground() {

		Drawable wallpaper = peekWallpaper();
		if (wallpaper == null) {
			try {
				clearWallpaper();
			} catch (IOException e) {
				Log.e("tag", "Failed to clear wallpaper " + e);
			}
		} else {
			getWindow().setBackgroundDrawable(wallpaper);
		}
	}

如果想利用壁纸更改的广播来实时修改apk的背景也是可以的:

	private void registerIntentReceivers() {
		IntentFilter filter = new IntentFilter(Intent.ACTION_WALLPAPER_CHANGED);
		registerReceiver(mWallpaperReceiver, filter);
	}
在接收广播的函数里修改背景就行了。


这样,就可以利用修改壁纸来更改apk的背景同时也不用自己保存任何相关信息了。


还有另外一种方法,就是将当前的apk应用背景设置为透明,直接使用壁纸图片作为背景,这样是最为方便的。

需要在Manifest.xml文件里面修改:

android:theme="@android:style/Theme.Translucent">
然后修改窗口属性(函数参数为true):

	void setWallpaperVisibility(boolean visible) {
		int wpflags = visible ? WindowManager.LayoutParams.FLAG_SHOW_WALLPAPER : 0;
		int curflags = getWindow().getAttributes().flags & WindowManager.LayoutParams.FLAG_SHOW_WALLPAPER;
		if (wpflags != curflags) {
			DisplayMetrics metrics = new DisplayMetrics();
			getWindowManager().getDefaultDisplay().getMetrics(metrics);
			WallpaperManager.getInstance(this).suggestDesiredDimensions(metrics.widthPixels, metrics.heightPixels);

			getWindow().setFlags(wpflags, WindowManager.LayoutParams.FLAG_SHOW_WALLPAPER);
		}
	}
即可。


修改壁纸,还需要再apk中增加相应的权限:

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



参考:

http://blog.csdn.net/xiaodongvtion/article/details/8161695

http://blog.sina.com.cn/s/blog_62c194760100g9dx.html



  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值