Как обнаружить изменения в приложении Dialer по умолчанию? - PullRequest
0 голосов
/ 07 октября 2019

Контекст

Я реализую RCC , и, как видно из этой спецификации GSMA, мне нужно иметь возможность обнаруживать изменения в номеронабирателе по умолчанию.

В соответствии с разделом спецификации B.1.1:

В версии ОС Android ™ выше или равной 7.0, (...) получать уведомления об изменениях приложения SMS по умолчанию и DefaultСмена номеронабирателя, клиент 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_applicationURI (content://settings/secure/dialer_default_application).

Однако, как определено в спецификации, мы должны получать эту трансляцию

Вопрос

Я что-то не так делаю при реализации этой трансляции? Кто-нибудь получает эту трансляцию (возможно, проблема с конкретным устройством)? Есть ли какие-либо проблемы в использовании обходного решения (dialer_default_application - это скрытая константа в Settings.Secure)?

1 Ответ

1 голос
/ 08 октября 2019

Глядя на исходный код платформы ( 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()));

Вместо отправки трансляциивсем заинтересованным BroadcastReceivers, он вызывает sendBroadcastAsUser(Intent intent, UserHandle user), который отправит его только текущему пользователю (имеется в виду приложение).

Я думаю, что документация для ACTION_DEFAULT_DIALER_CHANGED могла бы сделать его более понятным, хотя.

...