Запрос на изменение набора номера по умолчанию не показывает системное диалоговое окно на некоторых устройствах
Наше приложение должно стать приложением для набора номера по умолчанию (также известным как "обработчик телефона по умолчанию", "приложение вызова по умолчанию"), чтобы оно могло выполнять вызовы в соответствии с новой политикой разрешений Android.
Мы используем следующее намерение, чтобы показать системное диалоговое окно, чтобы попросить пользователя сделать наше приложение по умолчанию:
Intent intent = new Intent(TelecomManager.ACTION_CHANGE_DEFAULT_DIALER);
intent.putExtra(TelecomManager.EXTRA_CHANGE_DEFAULT_DIALER_PACKAGE_NAME, getPackageName());
startActivityForResult(intent, RC_DEFAULT_PHONE);
Это хорошо работает на всех наших тестовых устройствах, и, по-видимому, для большинства пользователей, но не показывает никакого диалога и сразу возвращает RESULT_CANCELED
код результата для некоторых устройств.
Глядя на отчеты, кажется, что большинство, если не все отчеты поступают из Huawei
устройства (и от Huawei
бренд - Honor
).
Любая идея, как отобразить диалог приложения вызова по умолчанию на этих устройствах?
Любое другое намерение, которое мы можем выполнить, чтобы помочь пользователю вручную установить наше приложение в качестве вызывающего приложения по умолчанию?
3 ответа
У меня была такая же проблема при создании приложения для набора номера. Начиная с версии Q android os должен, но этот код запрашивает номеронабиратель по умолчанию в телефоне >= Q android
private static final int CHANGE_DEFAULT_DIALER_CODE =25 ;
private void offerReplacingDefaultDialer() {
if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.M){
Intent intent = new Intent(TelecomManager.ACTION_CHANGE_DEFAULT_DIALER);
intent.putExtra(TelecomManager.EXTRA_CHANGE_DEFAULT_DIALER_PACKAGE_NAME,
this.getPackageName());
startActivity(intent);
}
if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q){
RoleManager roleManager = (RoleManager) getSystemService(ROLE_SERVICE);
Intent intent = roleManager.createRequestRoleIntent(RoleManager.ROLE_DIALER);
startActivityForResult(intent, CHANGE_DEFAULT_DIALER_CODE);
}
}
Вернулось некоторое прибегание к гуглу, что устройства чести требуют, чтобы вы изменили приложение для набора номера по умолчанию в настройках, может быть, запуск намерения непосредственно на этой странице настроек? Что касается конкретного аргумента страницы настроек, вам придется проверить устройство чести
startActivityForResult(new Intent(android.provider.Settings.ACTION_SETTINGS), 0);
тогда вы можете обработать результат в вашем приложении (проверив, является ли ваша звонилка по умолчанию сейчас), иначе сообщите пользователю об ошибке
Возможно добавление следующих <intent-filter>
решать проблему:
<intent-filter>
<action android:name="android.intent.action.DIAL" />
<category android:name="android.intent.category.DEFAULT" />
<data android:scheme="tel"/>
</intent-filter>