2012-02-24 18 views
7

Próbuję wyciszyć połączenie przychodzące i uniemożliwić dzwonek urządzenia BlackBerry. Próbowałem Alert.setVolume (0) i niektóre klucze EventInjector, ale to nie zadziałało.Jak wyciszyć połączenie przychodzące

Jak wyciszyć połączenie przychodzące?

Odpowiedz

3

You won't be able to wyłączyć programowo dźwięk (znaleziono kilka innych źródeł, które mówiły to samo). Wydaje się, że najlepszym sposobem obejścia tego problemu było użycie EventInjector, aby zmienić profil dźwiękowy telefonu na cichy.

+0

OK, wiem o tym. Ale jak użyć EventInjector, aby zmienić profil dźwiękowy telefonu na cichy? Próbowałem kilku kombinacji i nie działałem ... żadnych pomysłów? –

+0

Jeśli masz urządzenie BB, po prostu znajdź naciśnięcia klawiszy potrzebne do zmiany telefonu na cichy profil, a następnie powiel go za pomocą kodu. – jprofitt

+0

Wyliczyłem to ... wypróbowałem .. i nie działało :) –

6

Byłem zaintrygowany twoim pytaniem i zdecydowałem się podjąć wyzwanie. Próbowałem różnych rzeczy, w tym

  1. Odtwarzanie „Silence” plik audio nadzieję pokrywać dzwonek urządzenia lub zajmują odtwarzacz multimedialny
  2. Hacking ekranu telefonu poprzez UiApplication.getUiApplication().getActiveScreen()
  3. Wstrzykiwanie zdarzenia klawiatury

W końcu, wciskanie klawisza VOLUME UP (działa również klawisz VOLUME DOWN), zadziałało dla mnie zdarzenie i wyciszył dzwonek urządzenia podczas połączenia przychodzącego. Wadą tego podejścia jest to, że czasami urządzenie zadzwoniło na ułamek sekundy przed wyciszeniem.

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(); 
    } 
} 

następuje również działa (zamiast Muter nić callIncoming() sposobem następującym kodem).

+0

Dziękuję za odpowiedź. Ale chcę, żeby dzwonek był wyłączony, gdy odebrano połączenie nie po kilku sekundach. Czy masz jakieś wskazówki na ten temat? –

+0

@FaridFarhat W tej chwili nie. BTW, to nie kilka sekund, ale prawdopodobnie mniej niż pół sekundy w niektórych przypadkach. W innych dzwonek jest natychmiast wyciszany. – mrvincenzo

2

Niektóre telefony Blackberry mają klawisz wyciszenia. można spróbować następujący pomysł:

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

jestem dość nowy w tym wszystkim ... ale myślę, że równie dobrze może umieścić w moim 2 centów warto ...

i starali się znaleźć sposoby programowej zmiany ustawień profilu ...

Okazało się, że chociaż nie możemy (jeszcze) zmienić ustawień profilu, możemy zmienić ustawienie, którego używamy (zmienić profil, który jest w użyciu, myślę) - to jest coś, co natknąłem się na szukanie informacji - chociaż powinienem dać kredyt alishaik786 za kod.

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) 
    { 

    } 
} 
Powiązane problemy