0

SO上有很多关于设备方向变化的问题——这对Widget可能有意义,也可能没有意义。我想收到有关 textScale 配置更改的通知。(我正在计算最好使用哪种字体大小,并重新排列布局,使其在小部件中看起来不错)。

话虽如此,我想知道最好的方法是什么。到目前为止,我发现:

  • 有一个Intent不能被 AppWidgetProvider 接收(“你不能通过清单中声明的​​组件接收这个,只能通过 Context.registerReceiver() 显式注册它。”)

  • android:configChanges="fontScale" 列出到清单中,这是针对 Activity,而不是针对 Receiver(针对 Widgets...)

  • 然后是一个RemoteViewsService,它有一个方法onConfigurationChanged (...),但我还不明白,我将如何使用它。

是否有更多替代方法可以检查?我需要使用 RemoteViewsService 吗?感谢您的提示!

4

1 回答 1

1

这些都不起作用:

  • 您无法注册可能会在几毫秒内被 Android 处理掉的组件。所以你不能注册 AppWidgetProvider 因为它不会留在内存中。但是,您可以通过另一个组件注册 BroadcastReceiver,因为此类注册的 BroadcastReceiver 的生命周期与注册它的对象相关联(请参阅下面的更多说明)。
  • 正如您正确指出的那样,configChanges 标记仅适用于 Activity。
  • RemoteViewsService 在使用可能适用于您的情况或可能不适用于您的情况的集合视图(列表、网格...)时使用?无论如何,它只能从 API 11 中获得,因此它不能在 Gingerbread 设备上运行。

选项 1 确实有效:https ://stackoverflow.com/a/2435879/534471 。问题是已注册的 BroadcastReceiver 与注册它的对象相关联。大多数 Android 组件(ContentProvider、Activity、Service)不会永远存在,但迟早会被 Android 销毁。您最好的选择是带有 START_STICKY 的服务,但正如 CommonsWare 在他的回答中正确指出的那样,这是一个混乱且无效的解决方案(也不是 100% 可靠)。

AFAIK 没有可靠的解决方案来解决您的问题。

于 2013-04-30T01:20:33.380 回答