问题标签 [sticky-broadcast]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
android - 为粘性广播增加安全性
根据 android 开发人员文档:
没有规定提供用户定义的权限来保护粘性广播。
我尝试使用 sendStickyBroadcastAsUser ,它要求应用程序具有两件事(根据上面的链接):1. 拥有“INTERACT_ACROSS_USERS”权限和 2. 应用程序必须是系统应用程序。
但是,我已经尝试按照指南实施它,但仍然可以在没有上述两个前提条件的情况下接收粘性广播(即,在没有所需许可的情况下使用普通应用程序),这仍然使我的广播不安全。
以下是我的代码片段:
我不能使用普通广播,因为它需要留在系统中,以便其他应用程序从中读取我的应用程序状态。
有没有办法保护我的粘性广播?
android - 粘性广播重播
我想更改粘性广播的附加内容,是否以相同的意图再次调用 sendStickyBroadcast 会创建新的粘性广播或替换以前的粘性广播?
另外,我使用粘性广播来维护某些属性的状态并将状态共享给任何想要它的人(服务和活动),是否有更好的方法在我的所有 android 类之间共享某些属性的状态?
android - 什么是替代粘性广播的机制示例?
粘性广播已被弃用。文档说:
这种机制的一个可能的例子是什么?我应该采取什么方法?
android - 如何确保当前在前台的任何应用程序活动接收消息
我希望Activities
当前处于前台的任何应用程序都可以接收消息。
所以我正在发送一个LocalBroadcastManager
在我的应用程序中分发消息。然后我的想法是拥有BaseActivity
所有其他Activities
必须扩展的东西。在BaseActivity
in 中onResume
,接收者已registerReceiver
为消息注册 ( ),而unregisterReceiver
在 中未注册 ( ) onPause
。
这将始终有效,但当消息仅在Activities
发生转换的时隙中分发时无效,前一个Activity
在它之后onPause
,下一个Activity
在它之前onResume
。
所以我想用sendStickyBroadcast
这样的消息会等到有些Activity
人没有把它拿出来,但我明白了
此方法在 API 级别 21 中已弃用。
那么如何确保当前在前台的任何应用程序的活动都能接收到消息。
android - 使用 DownloadManager 跨应用程序重新启动 Android 更新应用程序(避免多次下载)
我正在尝试通过使用下载管理器下载 apk 来更新我的应用程序。我已经注册了广播接收器来收听并DownloadManager.ACTION_DOWNLOAD_COMPLETE
在方法中MainActivity
打开 apk onReceive
。以下是代码:
updateApp(url)
在 UI 中单击按钮时调用。现在点击按钮后,下载开始。假设应用程序在启动下载后关闭(接收方未注册),当应用程序再次启动时,我遇到了两种情况。
我的应用程序重新启动后之前的下载完成 -
downloadReference
丢失并且当我的接收器接收到广播时,referenceId
不会与 相同downloadReference
,因此installIntent
永远不会启动。所以我必须再次点击更新按钮并开始下载。有没有办法避免这个问题?上一次下载在我的应用程序重新启动之前完成 - 在新启动的活动中无法知道我上一次下载是否完成。我必须再次单击按钮并重新启动下载。有没有办法为下载管理器启用粘性广播?
android - 电池充满电后如何让android自动启动我的应用程序?
我的问题与此类似: 电池接收器充满电不工作 。这个问题没有答案。
以下是我到目前为止想到的方法:
方法 1:在 AndroidManifest.xml 中为 ACTION_BATTERY_CHANGED 注册一个 BroadcastReceiver。
由于以下原因,这将不起作用:
我无法在 中注册 BroadcastReceiver 以AndroidManifest.xml
进行侦听,ACTION_BATTERY_CHANGED
因为它是此处所述的粘性 Intent:https ://developer.android.com/reference/android/content/Intent.html#ACTION_BATTERY_CHANGED 。
方法 2:在 MainActivity.java 的onCreate()
方法中以编程方式注册一个 BroadcastReceiver。
这种方法的问题是:避免在 Android 中注册重复的广播接收器
除了上述问题外,我还没有正确理解广播接收器的范围。更准确地说,我不明白当应用程序注册时,应用程序注册的广播接收器会发生什么情况:
1) 被安卓系统调用它的onDestroy()
方法销毁
2) 当应用程序被用户通过应用程序管理器设置强制停止时。
有人可以解释一下吗?
方法 3:使用使用 SharedPreferences 和 BroadcastReceiver 来监听设备重启的变通方法。
如果我之前为 ACTION_BATTERY_CHANGED 注册了广播接收器,有一个共同的偏好让我知道。如果是,不要创建一个新的,否则,为 ACTION_BATTERY_CHANGED 创建一个新的广播接收器。正如方法 2 中的链接所指出的,SharedPreference 中的值在设备重新启动时变得无效,因此有一个单独的广播接收器在重新启动时再次创建接收器并更新共享首选项以反映相同。
虽然,方法 3 可能有效,但我觉得这是一种繁琐的方法。有没有更简单的方法?
此外,我的应用程序效率低下,因为它会在电池状态的每次变化时运行。有没有办法让它运行,只有当电池充满时,这是我的主要目的?
android - 如何在 Android 中替换 sendStickyBroadcast?
如您所知, sendStickyBroadcast 方法现在已弃用。如何更换它?
当然我可以使用 sendBroadcast 但它不会粘。
android - android/或替代蓝牙耳机的粘性广播意图
我正在开发一个应用程序,我需要知道是否连接了蓝牙耳机。我创建了一个广播接收器,如果我们在应用程序打开时连接到蓝牙耳机,它会接收广播意图。另一方面,如果连接到蓝牙设备然后启动应用程序,我没有收到任何蓝牙设备连接的广播。我想知道在应用程序启动时是否连接了任何蓝牙耳机。以下是我的广播接收器和清单。
清单.xml
我想知道是否还有其他我应该听的意图。或者请让我知道实现预期目标还有哪些其他选择。
PS:连接的设备应该是耳机,因为我打算使用蓝牙耳机的麦克风。
android - ConnectivityManager.CONNECTIVITY_ACTION -> 所有设备/操作系统版本的粘性意图?
我测试了注册ConnectivityManager.CONNECTIVITY_ACTION
("android.net.conn.CONNECTIVITY_CHANGE")
发送粘性 Intent
。我们能确定我们在所有设备和操作系统版本上都收到了这个粘性 Intent 吗?它会在未来的 android os 版本中提供吗?
android - 粘性广播在 Android 中提供安全异常以在 Android P 中工作
我在我的应用程序中使用粘性广播,并且我在清单中包含了以下权限。
该应用程序在个人资料中正常安装时运行良好。由于安全异常,仅在工作配置文件中安装的同一应用程序崩溃。如果该应用程序同时安装在工作资料和个人资料中,则它在两个资料中都可以正常工作。
- 只有个人资料:工作正常
- 个人资料和工作资料:工作正常
- 仅工作资料:崩溃
崩溃只发生在 Android Pie 中。
给出异常的 API 是 context.removeStickyBroadcast()