当用户按下呼叫按钮时,从应用程序拨打电话(覆盖默认行为)

时间:2011-01-21 06:20:10

标签: blackberry

我的应用中有一个列表字段,显示了联系人列表。当用户按下绿色呼叫按钮时,我想呼叫所选联系人(而不是启动电话呼叫日志应用程序的默认行为)。

这意味着有两个问题: 1)我可以拦截绿色呼叫按钮吗? 2)如何从应用程序拨打电话?

2 个答案:

答案 0 :(得分:4)

在回答问题之前,我们假设您正在跟踪列表中当前选定的项目,并且您可以找到相关的电话号码。

1)拦截通话按钮
您需要在Manager或Screen中实现keyDown(int, int)方法,捕获正确的密钥代码,然后返回true:

protected boolean keyDown(int keycode, int time)
{
    // check for the green phone button
    if (keycode == 1114112)
    {
        /* 
         * Place your custom calling code here.
         */

        return true; // indicates that this method has consumed the keypress
    }
    else
    {
        return super.keyDown(keycode, time);
    }
}

(根据http://supportforums.blackberry.com/t5/Java-Development/Can-Over-ride-Call-Button-using-api-Issue-Shows-Context-Menu-on/m-p/252554/highlight/true#M41073给出的答案)

2)拨打电话
您需要Invoke()手机应用,并传递您要拨打的电话号码:

    PhoneArguments callArgs = new PhoneArguments(
        PhoneArguments.ARG_CALL, "+27 83 111 1234");
    Invoke.invokeApplication(Invoke.APP_TYPE_PHONE, callArgs);

<小时/> 所以组合给出了这段代码:

protected boolean keyDown(int keycode, int time)
{
    // check for the green phone button
    if (keycode == 1114112)
    {
        // get phone number - you must write this yourself
        String number = selectedContact.getNumber();  // assume some method here depending on your solution

        // make the call
        PhoneArguments callArgs = new PhoneArguments(
            PhoneArguments.ARG_CALL, number);
        Invoke.invokeApplication(Invoke.APP_TYPE_PHONE, callArgs);

        // indicate that the key has been processed
        return true;
    }
    else
    {
        return super.keyDown(keycode, time);
    }
}

答案 1 :(得分:1)

来自Blackberry文档:

  

net.rim.blackberry.api.phone

     

公共决赛课电话延伸   对象

     

此课程提供以下内容:

* Advanced utilities for interaction with the Phone
     

应用。您可以使用这些方法   在这个类中进行更精细的操作   电话应用程序。例如,   将DTMF音调注入活动状态   调用。       *访问设备上的多行。       *如果支持,则将数据添加到传入和活动呼叫屏幕。

     

多行示例

     

示例A:切换一行

     
      
  1. 创建一个扩展MultiLineListener的类。

         

    公共类MultiLineAction扩展了MultiLineListener

  2.   
  3. 将该课程注册为PhoneListener。

         

    Phone.addPhoneListener(本);

  4.   
  5. 实现MultiLineListener回调,以便应用程序可以   通知切换结果。

         

    public void setPreferredLineFailure(int lineId)      {          _screen.popupMessage(“切换失败”);      }      public void setPreferredLineSuccess(int lineId)      {       _screen.popupMessage(“切换到”+ Phone.getLineNumber(lineId)+“   完成“);      }

  6.   
  7. 调用Phone.setPreferredLine()。

         

    Phone.setPreferredLine(Phone.getLineIds()[0]);

  8.         

    示例B:发起拨出电话

         
        
    1. 调用Phone.initiateCall。

           

      Phone.initiateCall(Phone.getLineIds()[0],   “5195550123”);

    2.   
    3. 在应用程序之前从手机监听器取消注册该类   已关闭。

           

      Phone.removePhoneListener(本);

    4.         

      类别:       签名:此元素只能由签名的应用程序访问。如果   请打算使用这个元素   访问   http://www.blackberry.com/go/codesigning   获取一组代码签名密钥。   代码签名仅需要   在BlackBerry上运行的应用程序   智能手机;在BlackBerry上开发   智能手机模拟器可以发生   没有代码签名。以来:       BlackBerry API 4.0.0

http://www.blackberry.com/developers/docs/6.0.0api/