我可以在广播接收器中获取壁纸更改事件吗? 我需要检测用户是否更换了墙纸。 我怎么能这样做?
我在做什么是这样的: 我有一个自动更改壁纸的应用程序。 如果用户使用不同的应用程序手动更改它,我想注意它,并询问用户是否要将新壁纸添加到我的应用程序列表中
答案 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确实有一些吸气剂可以将当前壁纸作为可绘制物品返回给您。也许您可以将当前的一个与存储的副本进行比较,以确定它是否已被更改。但是,如果您使用此功能通过在设置壁纸后更改壁纸来欺骗用户,请知道,我希望您赤脚在黑暗中踩到乐高。