2010-11-02 12 views
8

Quiero implementar una puerta de enlace para manejar llamadas salientes.Android 1.6 equivalente de EXTRA_GATEWAY_URI

En la última 2.x versiones de Android que puedo hacer esto fácilmente con la cadena adicional ACTION_CALL oculto: "com.android.phone.extra.GATEWAY_URI"

Pero en versiones anteriores, al igual que 1.6, I don No sé cómo hacerlo. Debe ser posible porque Google Voice lo está haciendo. ¿Puede alguien ayudarme?

Gracias, Emmanuel

+0

Básicamente, quiero poder llamar a un número de teléfono, pero tengo una se muestra un número diferente para el usuario. Esto sería útil para aplicaciones de tarjetas de llamadas, por ejemplo. – Emmanuel

+0

¿Qué debo hacer para que me respondan? – Emmanuel

+0

No es el código original abierto en algún lugar. Puede escanear la implementación y copiar el código necesario. – CodingBarfield

Respuesta

2

Hey Emmanuel, 76% de los dispositivos Android 2.x ya ha ejecutado tal vez se desperdicia ese esfuerzo. Se espera que Gingerbread salga a finales de año, lo que empujará aún más el porcentaje de dispositivos 1.6. En menos de medio año, Android 2.xy superior superarán la marca del 80%. Basta con mirar la distribución de la versión de plataforma http://d.android.com/resources/dashboard/platform-versions.html. Tal vez echar un vistazo al código fuente en el Proyecto de Código Abierto de Android.

Encontré la cadena que mencionaste en el InCallScreen.java. Quizás eso te brinde una manera de profundizar en el código fuente anterior para tratar de averiguar si puedes acceder a él a través de algunas API no documentadas. Pero mi sugerencia sería no molestarme con esos últimos 25% de dispositivos con 1.6 que desaparecerán rápidamente.

[Actualización] Dado que es un requisito para que funcione, sugeriría que vuelva a compilar la aplicación de teléfono desde el repositorio git y que sea debugable de esa manera se puede ver exactamente lo que está pasando. Probablemente tener un dispositivo ASOP ejecutando 1.6 sería su mejor opción para profundizar en cómo lo está haciendo Android. Básicamente, tendrías que realizar una copia de seguridad de todo el código que está involucrado en esta función en 2.x de nuevo a 1.6. Desde la perspectiva del tiempo al mercado, sugeriría sacar la aplicación con soporte 2.x y lanzar una segunda versión que está diseñada para 1.6. Retrasar el lanzamiento solo por 1.6 parece ser una mala idea de negocio.

+0

En cierto sentido, estoy de acuerdo con usted, pero este es un requisito de mi empleador y tengo que entregarlo. Miré el código anterior pero no sé cómo funciona. Intenté jugar con los extras sin éxito. Básicamente, quiero poder llamar un número de teléfono, pero que se muestre un número diferente para el usuario. – Emmanuel

+0

Acabo de actualizar mi respuesta. Echar un vistazo. – AGrunewald

+0

No estoy seguro de entender. ¿Quieres que depure la aplicación telefónica mientras ejecutas Google Voice? No estoy seguro de cómo hacerlo ... Primero tengo que instalar Google Voice en el emulador, no tengo idea de cómo hacerlo. Segundo Google Voice no está disponible en Canadá. Tendría que hacer trampa. – Emmanuel

0

Ese código que usa GATEWAY_URI definitivamente se agregó en Eclair. Mirando en AOSP, en paquetes/aplicaciones/Teléfono/src/com/android/teléfono/InCallScreen.java, ese trozo de código es totalmente inexistente en Donut:

// If a provider is used, extract the info to build the 
    // overlay and route the call. The overlay will be 
    // displayed the first time updateScreen is called. 
    if (PhoneUtils.hasPhoneProviderExtras(intent)) { 
     mProviderLabel = PhoneUtils.getProviderLabel(this, intent); 
     mProviderIcon = PhoneUtils.getProviderIcon(this, intent); 
     mProviderGatewayUri = PhoneUtils.getProviderGatewayUri(intent); 
     mProviderAddress = PhoneUtils.formatProviderUri(mProviderGatewayUri); 
     mProviderOverlayVisible = true; 

     if (TextUtils.isEmpty(mProviderLabel) || null == mProviderIcon || 
      null == mProviderGatewayUri || TextUtils.isEmpty(mProviderAddress)) { 
      clearProvider(); 
     } 
    } else { 
     clearProvider(); 
    } 

no puedo ver ninguna alternativa. Es mejor que tal vez tomar esa aplicación de Donut, agregar lo que necesita y lanzarla como una nueva aplicación de teléfono en dispositivos Donut ...

+0

También estaba buscando en el código fuente y me di cuenta de que faltaba la API en 1.6 y anteriores. Pero dado que Google Voice puede hacerlo, tiene que haber alguna otra API que pueda usar para producir resultados similares. Miré extras pero no pude encontrar nada. Me parece extraño que, para ACTION_CALL, el número de teléfono se especifique tanto en EXTRA_PHONE_NUMBER como en el URI de intención, pero parece que solo importa el número de URI de intención. Todo lo que puse en EXTRA_PHONE_NUMBER parece ser ignorado. ¿O tal vez hay una acción secreta para hacer llamadas de Google Voice? – Emmanuel