Отправка паузы в номеронабиратель - PullRequest
27 голосов
/ 22 апреля 2011

Аналогично Отправка паузы и 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?

Ответы [ 6 ]

17 голосов
/ 01 февраля 2012

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

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

Собственная программа для набора номера в 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. Это обойдёт номеронабиратель, поэтому его следует использовать с осторожностью.

4 голосов
/ 30 июля 2011

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

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

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

3 голосов
/ 25 апреля 2011

Из исходного кода Android latin ime :

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

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

PhoneNumberUtils.PAUSE
0 голосов
/ 22 декабря 2015

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

tel:number;postd=post-dial

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

0 голосов
/ 03 октября 2014

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

Просто сделайте так, как он должен:

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

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

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

0 голосов
/ 19 мая 2011

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

...