2011-04-21 14 views
26

De forma similar a Sending Pause and DTMF input in android, estoy intentando enviar el carácter de pausa "," al marcador. Esto funciona en teléfonos HTC Sense e incluso en Xoom, pero no en teléfonos con "experiencia de stock" como el Nexus One o el T-Mobile G2 (y sospecho que el Motorola Droid).Pausa de envío al marcador

Estos teléfonos parecen tener un marcador que intenta formatear el número (es decir, agregar guiones) y detenerse al presionar un carácter de coma. Curiosamente, no se atraganta con un carácter "p", aunque eliminará "p" y seguirá sumando números.

Aquí es lo que ve el ActivityManager:

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

También he tratado de forma codificada, "tel: 8883333% 2C444" sin diferencias en el comportamiento de estos teléfonos. Intenté "p", como se mencionó, pero estos caracteres se descartan, lo que da como resultado que los marcadores tengan 888-333-3444 incorrectamente poblados, y no estoy seguro de que "p" sea correcto de todos modos.

Entonces, la pregunta: ¿Hay alguna manera de especificar una pausa que funcione en la mayoría o en todos los dialers de Android?

Respuesta

17

Respuesta corta: Parece que no es posible usar el marcador nativo.

Respuesta larga:

El marcador nativo en Android utiliza el código siguiente para extraer el número se pasa en el marcador mediante un Intento

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

Dentro del método setFormattedDigits el número se transforma de esta manera:

String dialString = PhoneNumberUtils.extractNetworkPortion(data); 

en cuanto a la documentación para extractNetworkPortion se dará cuenta de que ", extrae la porción de dirección de red [whe re la] parte de la dirección de red es todo hasta separadores de dígitos de control DTMF (pausa o espera).

Por lo tanto, el código intencionalmente muestra el carácter de pausa y todo lo que viene después. La única alternativa que puedo pensar es reemplazar el marcador o utilizar la acción ACTION_CALL en lugar de ACTION_DIAL. Eso evitará el marcador, por lo que debe usarse con precaución.

+0

Gracias por investigar esto. – pforhan

3

partir del androide latin ime source code:

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

No estoy 100% seguro de si es público, pero que podría ser capaz de utilizar:

PhoneNumberUtils.PAUSE 
+0

Sí, así es como determiné que debería enviar una coma. Pero el problema es que algunos marcadores dejan de funcionar una vez que golpean una coma. – pforhan

0

'' es la norma, pero HTC utilizado 'p' en la magia de Rogers, ¿has intentado con 'p'? HTC Magic is using p

+0

Sí, probé el carácter p, como lo describo en mi pregunta. Simplemente se dejó caer, y todos los números se unieron. – pforhan

3

marcación pausa ha sido comas durante 30 años

Si el teléfono Android es compatible con el UIT-T V.250 ATS8 = 2 debe establecer el retraso causado por una coma a 2 segundos. (es posible que de alguna manera se haya configurado en 0s)

ITUT es una gran norma de organización, puede descargar sus estándares de forma gratuita.

+0

Gracias por la información. Realmente creo que son los marcadores los que eliminan las comas de la cadena en el intento. Si recuerdo correctamente, estos marcadores le permiten insertar pausas, siempre que lo haga desde su UI. – pforhan

+0

Los teléfonos Android pueden usar este estándar * internamente *, pero la interfaz que permite que otras aplicaciones envíen solicitudes para marcar un número usa los URI RFC3966 para indicar el número, que no admite un carácter de pausa como opción intencional (consulte http: // tools.ietf.org/html/rfc3966#section-12) – Jules

0

Esto es horrible y peligroso.Las personas de negocios que reciben correos electrónicos de llamadas de conferencia en sus teléfonos tienen que cambiar constantemente de un lado a otro para obtener el número.

Simplemente hacer que funcione como debería:

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

deberán marcar el número de la pausa 877 continuación, marque el código de participante en la conferencia y 'entrar' (#) cuando se ha seleccionado en cualquier lugar en el teléfono.

Es así de simple. El hecho de que esto no funciona en Android es un lanzamiento de ventas de iPhone.

+1

Probablemente quiera presentar un error con Android, no estoy seguro de que lo lean aquí. – pforhan

0

para futuras referencias RFC-2806 especifica el almacenamiento de números de teléfono en el formato:

tel:number;postd=post-dial 

Dónde number puede comenzar con + para la marcación intencional y puede incluir - o . como separador visual y post-dial puede incluir números, mayúsculas letras AD, #, *, p por pausa y w por espera.

+0

Lamentablemente, iOS (a partir de la versión 9) falla cuando se le da "postd =" en un tel: URI, así que por ahora, siga usando only, and; en iOS –