【发布时间】:2019-10-07 11:52:25
【问题描述】:
上下文
我正在实施RCC,正如 GSMA 在本规范中所见,我需要能够检测默认拨号器更改。
根据规范 B.1.1 部分:
在高于或等于 7.0 的 Android™ OS 版本上,(...) 要通知默认 SMS 应用程序更改和默认拨号程序更改,RCS 客户端应侦听 Android™ Intents 的广播:“ACTION_DEFAULT_SMS_PACKAGE_CHANGED”。 “ACTION_DEFAULT_DIALER_CHANGED”
目前,我在这样的示例项目中使用 TelecomManager.ACTION_DEFAULT_DIALER_CHANGED:
<receiver android:name="BroadcastTest">
<intent-filter>
<action android:name="android.telecom.action.DEFAULT_DIALER_CHANGED"/>
</intent-filter>
</receiver>
BroadcastTest 类是打印日志的空 BroadcastReceiver。
问题
在设置中更新拨号器应用时,接收器中没有收到广播。我尝试使用优先级,但也没有成功。如果应用程序发出请求,我将收到广播,但是,如果用户也更改了设置(或使用其他应用程序),我需要执行一些行为。
这个广播好像没有被发送,这使得这个规范的实现变得困难。
相关应用具有通话权限。无论应用是否为默认拨号器,都不会收到广播。
解决方法
我想出了一个解决方法,它涉及注册一个内容观察者,以便在 dialer_default_application URI (content://settings/secure/dialer_default_application) 发生更改时收到通知。
但是,按照规范中的定义,我们应该会收到这个广播
问题
执行此广播时我做错了什么吗?是否有人收到此广播(可能是特定于设备的问题)?使用变通方案是否有问题(dialer_default_application 是Settings.Secure 中的隐藏常量)?
【问题讨论】:
标签: android broadcastreceiver telephonymanager