【问题标题】:Wallpaper changed broadcast receiver android壁纸更改广播接收器android
【发布时间】: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


【解决方案1】:

既然您不会再收到广播,那么尝试提高模糊方法的性能并在没有 SD 卡存储的情况下即时进行,难道不是最好的方向吗?

问题是,要让用户更改背景,他们几乎必须离开您的应用(您仍然可以注意到这一点),并且当他们重新进入您的应用时,最多只能说一秒钟以进行模糊处理应用程序应该仍然是不错的用户体验。

也许看看这里(如果你还没有),关于 android 上的快速图像模糊:

Fast Bitmap Blur For Android SDK

【讨论】:

  • 感谢您的建议!我已经在使用快速模糊。根据图像,它也需要大约 1-5 秒的时间。我在上面的 cmets 中使用了第二种方法。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多