2012-02-24 5 views
7

Я пытаюсь отключить входящий звонок и не допустить, чтобы устройство BlackBerry звонило. Я попробовал Alert.setVolume (0) и некоторые ключи EventInjector, но это не сработало.Как отключить входящий звонок

Итак, как отключить входящий звонок?

ответ

3

Вы won't be able to отключите звук программно (нашли пару других источников, которые сказали то же самое). Лучшим обходным людям, которые, казалось, придумали, было использовать EventInjector, чтобы изменить звуковой профиль телефона на тихий.

+0

Хорошо, я знаю это. Но как использовать EventInjector для изменения звукового профиля телефона до молчания? Я пробовал пару комбинаций и не работал ... никаких идей? –

+0

Если у вас есть устройство BB, просто выясните нажатия клавиш, необходимые для изменения телефона в тихом профиле, а затем повторите его с помощью вашего кода. – jprofitt

+0

Выяснил это ... попробовал ... и не работал :) –

6

Я был озадачен вашим вопросом и решил заняться решением проблемы. Я пробовал разные вещи, включая

  1. Воспроизведения «молчание» аудиофайл желавший перекрываться звоном устройства или занимают медиаплеер
  2. Взлом экрана телефона через UiApplication.getUiApplication().getActiveScreen()
  3. инъекционных события клавиатуры

В конце концов, нажатие клавиши 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)); 
      } 
     }); 
+0

Спасибо за ваш ответ. Но я хочу, чтобы звонок был выключен при получении звонка не через несколько секунд. У вас есть какие-то сведения об этом? –

+0

@FaridFarhat Не сейчас. Кстати, это не пара секунд, но, вероятно, менее половины секунды в некоторых случаях. В других случаях звонок немедленно отключается. – mrvincenzo

2

Некоторые телефоны Blackberry имеют ключ-заглушку. Вы можете попробовать следующую идею:

public void callIncoming(int callId) { 
    if (KeyPad.hasMuteKey()) { 
     /* Inject KEY_SPEAKERPHONE event */ 
    } 
    else { 
     /* Inject KEY_VOLUME_DOWN event N times, so that you get the mute effect */ 
    } 
} 
0

Я совершенно новой для всего этого ... но я думал, что я мог бы также поставить в моей 2 центов стоит ...

я пытался найти способы программного изменения настроек профиля ...

Я обнаружил, что, хотя мы не можем изменить настройки профиля, мы можем изменить настройку, которую мы используем (измените используемый профиль, я думаю) - это то, с чем я столкнулся с поиском информации, хотя я должен отдать должное alishaik786 за код.

public final class LoadingScreen extends MainScreen implements FieldChangeListener 
    { 
     public LoadingScreen() 
    {   
     createGUI(); 
    } 

    private void createGUI() 
    { 
     try 
     {   
      ApplicationManager.getApplicationManager().launch("net_rim_bb_profiles_app"); 
     } 
     catch (Exception e) 
     { 
      //Exception 
     } 
    } 

    public void fieldChanged(Field field, int context) 
    { 

    } 
} 
Смежные вопросы