2012-02-24 17 views
7

我正在嘗試靜默來電並阻止BlackBerry設備響鈴。我試過Alert.setVolume(0)和一些EventInjector鍵,但這沒有奏效。如何靜默來電

那麼如何靜音來電呢?

回答

3

won't be able to以編程方式禁用聲音(發現一些其他來源表示同樣的事情)。人們似乎想出的最佳解決方法是使用EventInjector將手機的聲音配置文件更改爲無聲。

+0

好吧,我知道。但是如何使用EventInjector將手機的聲音配置文件更改爲無聲?我嘗試了幾個組合,並沒有工作......任何想法? – 2012-02-24 13:23:03

+0

如果您有BB設備,只需找出將手機更改爲靜音配置文件所需的按鍵,然後將其複製到您的代碼中即可。 – jprofitt 2012-02-24 13:32:43

+0

想通了...試了一下..並沒有工作:) – 2012-02-24 13:43:50

6

我很困惑你的問題,並決定接受挑戰。我通過UiApplication.getUiApplication().getActiveScreen()

  • 嘗試包括

    1. 玩起了「沉默」的音頻文件,希望能夠重疊設備的振鈴或佔用媒體播放器
    2. 黑客手機屏幕上不同的東西注入鍵盤事件

    最後,注入VOLUME UP鍵(音量降低鍵也可以),爲我工作並且靜音設備在來電時響鈴。這種方法的缺點是,有時設備在靜音之前確實響了幾分之一秒。

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

    以下中也可以(用下面的代碼替換callIncoming()方法Muter線程)。

     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

    感謝您的回覆。但我希望鈴聲在幾秒鐘後不再接到電話時關閉。你有任何線索嗎? – 2012-03-13 07:46:41

    +0

    @FaridFarhat目前還不是。順便說一句,這不是幾秒鐘,但在某些情況下可能不到半秒鐘。在其他情況下,鈴聲立即消失。 – mrvincenzo 2012-03-13 08:05:55

    2

    一些黑莓手機有一個靜音鍵。你可以試試下面的想法:

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