secretos - ¿Cómo obtener respuesta del código USSD de Android?
codigos secretos android lg (1)
Marcar un código USSD a partir de una actividad personalizada es sencillo usando un DIAL o CALL, pero escuchar el resultado no se debe a que Android no cuenta con el soporte adecuado para interceptar llamadas USSD dentro de la plataforma, sino que existe compatibilidad parcial aunque no documentada dentro del país aplicación dialer.
Para empezar, mira la clase PhoneUtils en el código fuente de Android. El enlace es para 4.0.3 pero creo que este soporte parcial ha estado presente desde 2.3.
Específicamente, mirando la línea 217, se está redactando una intención con el nombre "com.android.ussd.IExtendedNetworkService". Entonces, lo que debe hacer es implementar su propio servicio que responda a esa intención. El servicio debe implementarse de acuerdo con IExtendedNetworkService.aidl, que es parte del marco de Android.
La ayuda expone varias funciones, pero la que nos interesa es la función getUserMessage (texto) en ese servicio. El texto es el valor final devuelto por la llamada USSD.
Notas:
- Dado que PhoneUtils enlaza el servicio, entonces necesita iniciar el servicio al momento de iniciar el teléfono. También significa que cualquier modificación al servicio necesitará un reinicio del teléfono.
- La devolución de null de getUserMessage suprimirá que el marcador muestre el resultado de USSD, pero no hay forma de ocultar completamente el marcador.
- También puede usar las otras funciones para cambiar el texto que se muestra mientras la llamada está en progreso.
- Esto no parece funcionar en las indicaciones (menús) de USSD, solo en los resultados finales.
Verifique un código de ejemplo en github aquí .
He escrito una aplicación que usa código ussd. Deseo enviar una solicitud de un ussd pero no sé cómo obtener los datos y guardarlos en un String.
Código de muestra:
@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 captura de pantalla:
cómo resolver mi problema?