Cómo obtener respuesta del código USSD de Android?
He escrito una aplicación que usa código ussd. Quiero enviar una solicitud para un ussd pero no sé cómo obtener los datos y guardarlo en una cadena.
Código de muestra:
- Implementación de funciones USSD. Vincular un servicio a PhoneUtils sin reiniciar el teléfono en cada actualización
- ¿Cómo iniciar android.intent.action.CALL en servicio?
- ¿Cómo leer los mensajes de USSD en android?
- ¿Es posible leer el historial de costos de llamadas desde el diálogo planteado después de finalizar la llamada de prepago?
- Utilizar IExtendedNetworkService para obtener respuesta de USSD en Android
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Button btn = (Button) findViewById(R.id.button1); btn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub String encodedHash = Uri.encode("#"); String ussd = "*141*1" + encodedHash; startActivityForResult(new Intent("android.intent.action.CALL", Uri.parse("tel:" + ussd)), 1); } }); } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { // TODO Auto-generated method stub super.onActivityResult(requestCode, resultCode, data); Toast.makeText(getApplicationContext(), "USSD: " + requestCode + " " + resultCode + " ", 1).show(); if (requestCode == 1) { if (resultCode == RESULT_OK) { // String result=data.getStringExtra("result"); String dd = data.toString(); Toast.makeText(getApplicationContext(), dd, 1).show(); } }
Aplicación de capturas de pantalla:
Cómo resolver mi problema?
- El servicio USSD no funciona
- Una nueva forma de administrar los diálogos USSD en android
- Android studio Acción llamada para ejecutar códigos USSD
- ¿Cómo ejecutar comandos USSD en android?
- USSD respuestas de lectura
- Cómo interactuar con el cuadro de diálogo USSD mediante programación en android
- ¿Cómo interactuar con el menú USSD?
- ¿Cómo enviar un código USSD que contiene punto flotante decimal (.)?
Marcando un código USSD de una actividad personalizada es sencillo usando una intención de DIAL o CALL, pero escuchar el resultado devuelto no se debe a que Android no tiene soporte adecuado para interceptar llamadas USSD dentro de la plataforma, pero existe apoyo parcial aunque indocumentado dentro del nativo Dialer.
Como punto de partida, observe la clase PhoneUtils en el código fuente de Android. El enlace es para 4.0.3 pero creo que este apoyo parcial ha estado presente desde 2.3.
Específicamente, mirando la línea 217, se está componiendo una intención con el nombre "com.android.ussd.IExtendedNetworkService". Así que lo que necesita hacer es implementar su propio servicio que responde a esa intención. El servicio debe implementarse de acuerdo con IExtendedNetworkService.aidl, que forma parte del framework de Android.
El aidl expone varias funciones, pero la que nos importa es la función getUserMessage (texto) en ese servicio. El texto es el valor final devuelto por la llamada USSD.
Notas:
- Dado que el servicio es enlazado por PhoneUtils, entonces usted necesita para iniciar el servicio en el teléfono de arranque. También significa que cualquier modificación en el servicio necesitará un reinicio del teléfono.
- Devolver null de getUserMessage suprimirá el marcador de mostrar el resultado USSD pero no hay manera de ocultar completamente el marcador.
- También puede utilizar las otras funciones para cambiar el texto mostrado mientras la llamada está en curso.
- Esto no parece funcionar en los mensajes de USSD (menús), sólo en los resultados finales.
Compruebe un código de ejemplo en github aquí .
- No se puede instalar apk con adb en un dispositivo actualizado a Android Lollipop
- Pantalla negra en Genymotion