簡體   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