3

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

我正在做的是:我有一个可以自动更改壁纸的应用程序。如果用户使用不同的应用程序手动更改它,我想注意它并询问用户他/她是否想将该新壁纸添加到我的应用程序的列表中

4

2 回答 2

7

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

为了做你想做的事,你需要有更多的逻辑来使用它来确定壁纸是否已更改为除图像之外的其他内容:http: //developer.android.com/reference/android/app/WallpaperManager.html#获取壁纸信息()

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

此外,您需要非常小心地使用 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.
 */

真实的故事。

于 2012-05-15T19:31:00.253 回答
2

我不相信任何东西都会被广播。

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

于 2012-05-15T00:02:25.850 回答