【发布时间】:2013-11-16 03:31:01
【问题描述】:
关于应用程序 - 我正在将应用程序背景设置为模糊壁纸。在 Activity 中使用getWallpaper() 方法很容易获得可绘制的壁纸。然后我将drawable转换为位图并使用模糊算法来模糊位图,然后将其设置为背景图像。整个过程大约需要 1 到 5 秒。所以我决定把模糊的壁纸放在 SD 卡中,所以我只需要从 SD 卡中获取该图像,这样就不会花费太多时间。因此,每次用户更改壁纸时,我都需要使壁纸模糊并将其保存到 SD 卡中。为此,我需要 ACTION_WALLPAPER_CHANGED 广播接收器。
问题 - ACTION_WALLPAPER_CHANGED 意图过滤器在 API 16 之前工作正常,但从 API 16 开始,它已被弃用,并且不广播壁纸更改操作。
我希望每当用户更改背景时,我都需要将我的应用背景更改为墙纸的模糊图像。
【问题讨论】:
-
采用不同的方法怎么样(不确定这是否可行):按照文档中的建议,使用标志
WindowManager.LayoutParams.FLAG_SHOW_WALLPAPER来显示活动 UI 后面的壁纸。开始对使用getWallpaper()生成的位图进行模糊处理。由于位图模糊是一个多阶段的过程,您可以利用 5 秒的延迟来发挥您的优势....(续)。 -
(...) 说,您要经过 10 个阶段来创建模糊位图。在每个阶段(每 ~ 0.5 秒),使用生成的位图设置背景:
getWindow().setBackgroundDrawable(new BitmapDrawable(getResources(), processedBitmap))。它应该给你一个(平滑的?)模糊效果。不用说,将 5 秒缩短到不那么明显会有所帮助。 -
另一种方式:当您的应用程序启动时(第一次),使用
getWallpaper()检索位图,将其模糊,并保存原始和模糊副本 到 SD 卡。在随后的启动中,使用getWallpaper()检索位图并将其与您在上次启动时使用bitmapFromGetWallpaper.sameAs(originalFromSDCard)保存的原始 进行比较。如果它们相同,请使用 SD 卡中的模糊副本。否则,模糊bitmapFromGetWallpaper并更新 SD 卡上的原始和模糊副本。延迟现在应该只在用户更改壁纸时出现:与弃用之前相同。 -
您好,谢谢! @user2558882 我采用了您的第二种方法。还有如果 API
标签: android broadcastreceiver intentfilter wallpaper