blackberry - redes - informacion mediatica
Descartar un cuadro de diálogo del sistema en BlackBerry (3)
Tengo una aplicación BlackBerry ejecutándose en segundo plano que necesita saber cuándo el sistema abre el diálogo del sistema "Llamada perdida" y cerrarlo programáticamente sin la intervención del usuario. ¿Cómo puedo hacer eso?
Casi podría saber cuándo se abre el diálogo, es decir, un poco más tarde finalizo la llamada programáticamente ... pero ¿cómo puedo obtener una referencia al diálogo y cerrarlo?
Si sabe que el diálogo está allí, y es el diálogo más alto, las API de EventInjector podrían hacerlo: net.rim.device.api.system.EventInjector. Cuando sepa que el diálogo está allí, envíe un KeyEvent con un código clave ESCAPE. Esa API generalmente está bloqueada en la mayoría de los entornos empresariales, aunque ...
Descargo de responsabilidad: No lo he probado, me sorprendería un poco si funcionara, ya que eso podría significar que también podría descartar el diálogo ''Permitir esta conexión'', que sería un agujero de seguridad.
Esto debería funcionar:
UiApplication.getUiApplication().invokeLater(new Runnable(){
public void run(){
UiApplication.getActiveScreen().close();
}
});
Inyección de tecla presionada para el dispositivo El botón Cerrar se ve así:
KeyEvent inject = new KeyEvent(KeyEvent.KEY_DOWN, Characters.ESCAPE, 0);
inject.post();
No olvide configurar los permisos para la liberación del dispositivo: Opciones => Opciones avanzadas => Aplicaciones => [Su aplicación] => Editar permisos predeterminados => Interacciones => pulsación de tecla Inyección
Puede ser útil:
BlackBerry: simule un evento de KeyPress
Muestra de código:
class Scr extends MainScreen implements PhoneListener {
public Scr() {
Phone.addPhoneListener(this);
}
public boolean onClose() {
Phone.removePhoneListener(this);
return super.onClose();
}
public void callDisconnected(int callId) {
Timer timer = new Timer();
timer.schedule(new TimerTask(){public void run() {
KeyEvent event = new KeyEvent(KeyEvent.KEY_DOWN,
Characters.ESCAPE,
KeyListener.STATUS_NOT_FROM_KEYPAD);
event.post();
}}, 1000);
}
public void callAdded(int callId) {
}
public void callAnswered(int callId) {
}
public void callConferenceCallEstablished(int callId) {
}
public void callConnected(int callId) {
}
public void callDirectConnectConnected(int callId) {
}
public void callDirectConnectDisconnected(int callId) {
}
public void callEndedByUser(int callId) {
}
public void callFailed(int callId, int reason) {
}
public void callHeld(int callId) {
}
public void callIncoming(int callId) {
}
public void callInitiated(int callid) {
}
public void callRemoved(int callId) {
}
public void callResumed(int callId) {
}
public void callWaiting(int callid) {
}
public void conferenceCallDisconnected(int callId) {
}
}