【问题标题】:How to silence an incoming call如何使来电静音
【发布时间】:2012-02-24 13:08:17
【问题描述】:

我正在尝试使来电静音并防止 BlackBerry 设备响铃。我尝试了 Alert.setVolume(0) 和一些 EventInjector 键,但这不起作用。

那么如何让来电静音呢?

【问题讨论】:

    标签: blackberry java-me


    【解决方案1】:

    我对你的问题感到困惑,决定接受挑战。我尝试了不同的东西,包括

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

    以下方法也有效(将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));
                }
            });
    

    【讨论】:

    • 感谢您的回复。但我希望铃声在几秒钟后接到电话时关闭。你有什么线索吗?
    • @FaridFarhat 目前没有。顺便说一句,这不是几秒钟,但在某些情况下可能不到半秒钟。在其他情况下,铃声会立即静音。
    【解决方案2】:

    won't be able to 以编程方式禁用声音(发现其他几个来源也说同样的话)。人们似乎想出的最佳解决方法是使用EventInjector 将手机的声音配置文件更改为静音。

    【讨论】:

    • 好的,我知道。但是如何使用 EventInjector 将手机的声音配置文件更改为静音呢?我尝试了几种组合但没有奏效......有什么想法吗?
    • 如果您有 BB 设备,只需找出将手机更改为静音配置文件所需的按键,然后使用您的代码复制它。
    • 据此stackoverflow.com/a/2102835/396949,配置文件不能轻易更改。
    【解决方案3】:

    一些黑莓手机有静音键。你可以试试下面的思路:

    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 */
        }
    }
    

    【讨论】:

      【解决方案4】:

      我对这一切都很陌生...但我认为我不妨投入我的 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)
          {
      
          }   
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-10-31
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多