壁纸改变事件

时间:2012-05-14 22:53:39

标签: android broadcastreceiver wallpaper

我可以在广播接收器中获取壁纸更改事件吗? 我需要检测用户是否更换了墙纸。 我怎么能这样做?

我在做什么是这样的: 我有一个自动更改壁纸的应用程序。 如果用户使用不同的应用程序手动更改它,我想注意它,并询问用户是否要将新壁纸添加到我的应用程序列表中

2 个答案:

答案 0 :(得分:7)

壁纸图片更改时只有广播:http://developer.android.com/reference/android/content/Intent.html#ACTION_WALLPAPER_CHANGED

要做你想做的事,你需要有更多的逻辑来判断壁纸是否已经改为图像以外的东西:http://developer.android.com/reference/android/app/WallpaperManager.html#getWallpaperInfo()

说实话,如果你正在制作一个会改变的壁纸,你真的应该考虑写一个动态壁纸。这样可以更舒适地适应系统:您可以随时更改所显示的内容,并且用户选择不同的壁纸时很明显,因为您的动态壁纸将会停止。

此外,您需要非常小心使用ACTION_WALLPAPER_CHANGED,因为它可能会让您与其他应用程序进行错误的交互。以下是将在下一个API中出现的文档:

/**
 * Broadcast Action:  The current system wallpaper has changed.  See
 * {@link android.app.WallpaperManager} for retrieving the new wallpaper.
 * This should <em>only</em> be used to determine when the wallpaper
 * has changed to show the new wallpaper to the user.  You should certainly
 * never, in response to this, change the wallpaper or other attributes of
 * it such as the suggested size.  That would be crazy, right?  You'd cause
 * all kinds of loops, especially if other apps are doing similar things,
 * right?  Of course.  So please don't do this.
 *
 * @deprecated Modern applications should use
 * {@link android.view.WindowManager.LayoutParams#FLAG_SHOW_WALLPAPER
 * WindowManager.LayoutParams.FLAG_SHOW_WALLPAPER} to have the wallpaper
 * shown behind their UI, rather than watching for this broadcast and
 * rendering the wallpaper on their own.
 */

真实的故事。

答案 1 :(得分:2)

我不相信任何广播。

WallpaperManager确实有一些吸气剂可以将当前壁纸作为可绘制物品返回给您。也许您可以将当前的一个与存储的副本进行比较,以确定它是否已被更改。但是,如果您使用此功能通过在设置壁纸后更改壁纸来欺骗用户,请知道,我希望您赤脚在黑暗中踩到乐高。