Отправка паузы на номеронабиратель

Аналогично Отправка паузы и ввода DTMF в Android, я Пытаюсь отправить символ паузы "," на номеронабиратель. Это работает на телефонах HTC Sense и даже на Xoom, но не на телефонах со стандартным опытом, таких как Nexus One или T-Mobile G2 (и я подозреваю, что Motorola Droid).

В этих телефонах, кажется, есть номеронабиратель, который пытается красиво отформатировать номер (т.е. добавить тире) и останавливается при нажатии запятой. Интересно, что он не забивается символом «p», хотя он удаляет «p» и продолжает добавлять числа.

Вот что видит ActivityManager:

I/ActivityManager(   92): Starting activity: Intent { act=android.intent.action.DIAL dat=tel:8883333,444 cmp=com.android.contacts/.DialtactsActivity }

Я также пробовал закодированную форму «тел: 8883333% 2C444» без каких-либо различий в поведении на этих телефонах. Я пробовал «p», как уже упоминалось, но эти символы отбрасываются, что приводит к неправильному заполнению номеронабирателей 888-333-3444, и я все равно не уверен, что «p» правильный.

Итак, вопрос: есть ли способ указать паузу, которая работает для большинства или всех программ для набора номера Android?


person pforhan    schedule 21.04.2011    source источник


Ответы (6)


Краткий ответ: не похоже, что это возможно с помощью родной звонилки.

Длинный ответ:

Собственный номеронабиратель в Android использует следующий код для извлечения номера, который вы передаете номеронабирателю с помощью Intent.

if ("tel".equals(uri.getScheme())) {
  // Put the requested number into the input area
  String data = uri.getSchemeSpecificPart();
  setFormattedDigits(data, null);
  return true;
} 

В методе setFormattedDigits число преобразуется следующим образом:

  String dialString = PhoneNumberUtils.extractNetworkPortion(data);

Глядя на документы для extractNetworkPortion, вы заметите, что он «извлекает часть сетевого адреса [где] часть сетевого адреса — это все вплоть до разделителей контрольных цифр DTMF (пауза или ожидание).

Таким образом, код намеренно удаляет символ паузы и все, что следует за ним. Единственная альтернатива, которую я могу придумать, это заменить номеронабиратель или использовать действие ACTION_CALL вместо ACTION_DIAL. Это позволит обойти номеронабиратель, поэтому его следует использовать с осторожностью.

person Reto Meier    schedule 01.02.2012
comment
Спасибо, что изучили это. - person pforhan; 01.02.2012

30 лет пауза в наборе была запятой

Если телефон Android совместим с ITUT V.250 ATS8=2, следует установить задержку, вызванную запятой, на 2 секунды. (возможно, он каким-то образом был установлен на 0)

ITUT — отличная организация по стандартизации, вы можете скачать их стандарты бесплатно.

person Jasen    schedule 30.07.2011
comment
Спасибо за информацию. Я действительно думаю, что это сами звонилки выдирают запятые из строки в интенте. Если я правильно помню, эти номеронабиратели позволяют вставлять паузы, если вы делаете это из их пользовательского интерфейса. - person pforhan; 01.08.2011
comment
Телефоны Android вполне могут использовать этот стандарт внутренне, но интерфейс, позволяющий другим приложениям отправлять запросы на набор номера, использует URI RFC3966 для указания номера, который не поддерживает символ паузы как преднамеренный выбор (см. tools.ietf.org/html/rfc3966#section-12) - person Jules; 21.03.2013

Из Android-файла исходный код латинского ime:

<!-- Pause is a comma. Check PhoneNumberUtils.java to see if this has changed. -->
<Key 
    android:codes="44"
    android:keyLabel="Pause" />

Я не уверен на 100%, что это общедоступно, но вы можете использовать:

PhoneNumberUtils.PAUSE
person Macarse    schedule 24.04.2011
comment
Да, именно так я решил, что должен отправить запятую. Но проблема в том, что некоторые дозвонщики останавливаются, когда нажимают запятую. - person pforhan; 26.04.2011

',' является стандартом, но HTC использовала 'p' в магии Роджера, вы пробовали использовать 'p'? HTC Magic использует p

person Hazem Farahat    schedule 19.05.2011
comment
Да, я пробовал символ p, как я описываю в своем вопросе. Его просто отбросили, а все номера связали вместе. - person pforhan; 20.05.2011

Это ужасно и опасно. Деловые люди, получающие электронные письма о конференц-звонках на свой телефон, должны постоянно переключаться туда и обратно, чтобы получить номер.

Просто заставьте его работать как надо:

tel://+1-877-555-1212,,,2345678#

Следует набрать 877 номер паузы, затем набрать код участника конференции и «ввод» (#) при выборе в любом месте на телефоне.

Это так просто. Тот факт, что это не работает в Android, является рекламным ходом iPhone.

person Joe    schedule 03.10.2014
comment
Вы, вероятно, хотите сообщить об ошибке с Android, я не уверен, что они читают здесь. - person pforhan; 06.10.2014

Для дальнейшего использования RFC-2806 определяет хранение телефонных номеров в формате:

tel:number;postd=post-dial

Где number может начинаться с + для преднамеренного набора и может включать - или . в качестве визуального разделителя, а post-dial может включать цифры, заглавные буквы A-D, #, *, p для паузы и w для ожидания.

person Steve Barnes    schedule 22.12.2015
comment
К сожалению, iOS (начиная с версии 9) дает сбой при указании postd= в tel: URI, поэтому пока продолжайте использовать только , и ; на iOS - person Nick Dowell; 27.05.2016
comment
Спасибо, но это работает на эмуляторах, но не на некоторых телефонах. - person CoolMind; 27.09.2019
comment
@CoolMind, может быть, кто-то, кто знает, на каком телефоне он не работает, должен подать заявку на соответствие RFC-2806? - person Steve Barnes; 27.09.2019
comment
@SteveBarnes, ну, хорошая идея. Но даже если какой-либо производитель исправит эту ошибку в будущих телефонах, старые телефоны будут продолжать использовать старую схему. - person CoolMind; 27.09.2019