繁体   English   中英

如何检测默认拨号器应用程序更改?

[英]How to detect Default Dialer app changes?

语境

我正在实施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 class 是一个空的BroadcastReceiver打印日志。

问题

在设置中更新拨号器应用程序时,接收器中没有收到广播。 我尝试使用优先级,但也没有成功。 如果应用程序发出请求,我将收到广播,但是,如果用户也更改了设置(或使用其他应用程序),我需要执行一些行为。

似乎没有发送此广播,这使得该规范的实施变得困难。

有问题的应用程序具有通话权限。 无论应用程序是否为默认拨号程序,都不会收到广播。

解决方法

我想出了一个解决方法,它涉及注册一个内容观察者,以便在dialer_default_application URI ( content://settings/secure/dialer_default_application ) 中收到更改通知。

但是,按照规范中的定义,我们应该会收到这个广播

问题

实施此广播时我做错了什么吗? 是否有人收到此广播(可能是设备特定问题)? 使用变通解决方案是否有任何问题( dialer_default_applicationSettings.Secure中的隐藏常量)?

通过查看平台源代码( TelephonyServiceImpl class ),您所描述的行为似乎是预期的:

final Intent intent = new Intent(TelecomManager.ACTION_DEFAULT_DIALER_CHANGED);
intent.putExtra(TelecomManager.EXTRA_CHANGE_DEFAULT_DIALER_PACKAGE_NAME, packageName);
mContext.sendBroadcastAsUser(intent, new UserHandle(ActivityManager.getCurrentUser()));

它不会向所有感兴趣的 BroadcastReceiver 发送广播,而是调用sendBroadcastAsUser(Intent intent, UserHandle user) ,这只会将其发送给当前用户(即应用程序)。

我想ACTION_DEFAULT_DIALER_CHANGED的文档可以使它更清楚。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM