Я был озадачен вашим вопросом и решил принять вызов. Я пробовал разные вещи, включая
- Воспроизведение аудиофайла "тишина" в надежде перекрыть сигнал устройства или занять медиаплеер
- Взлом экрана телефона через
UiApplication.getUiApplication().getActiveScreen()
- Внедрение событий клавиатуры
В конце концов, добавление события VOLUME UP (также работает клавиша VOLUME DOWN) сработало для меня и отключило звук устройства при входящем звонке. Недостаток этого подхода состоит в том, что иногда устройство звонило в течение доли секунды, прежде чем отключить звук.
import net.rim.blackberry.api.phone.AbstractPhoneListener;
import net.rim.blackberry.api.phone.Phone;
import net.rim.device.api.system.Application;
import net.rim.device.api.system.EventInjector;
import net.rim.device.api.ui.Keypad;
class Muter extends AbstractPhoneListener {
public void callIncoming(int callId) {
Thread muterThread = new Thread(new Runnable() {
public void run() {
EventInjector.invokeEvent(new EventInjector.KeyCodeEvent(EventInjector.KeyCodeEvent.KEY_DOWN, (char) Keypad.KEY_VOLUME_UP, 0));
EventInjector.invokeEvent(new EventInjector.KeyCodeEvent(EventInjector.KeyCodeEvent.KEY_UP, (char) Keypad.KEY_VOLUME_UP, 0));
}
});
muterThread.setPriority(Thread.MAX_PRIORITY);
muterThread.start();
}
}
public class MuterApp extends Application {
public static void main(String[] args){
Phone.addPhoneListener(new Muter());
new MyApp().enterEventDispatcher();
}
}
Также работает следующее (замените нить Muter
в методе callIncoming()
на следующий код).
UiApplication.getUiApplication().invokeLater(new Runnable() {
public void run() {
EventInjector.invokeEvent(new EventInjector.KeyCodeEvent(EventInjector.KeyCodeEvent.KEY_DOWN, (char) Keypad.KEY_VOLUME_UP, 0));
EventInjector.invokeEvent(new EventInjector.KeyCodeEvent(EventInjector.KeyCodeEvent.KEY_UP, (char) Keypad.KEY_VOLUME_UP, 0));
}
});