首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当用户按下呼叫按钮时从应用程序发出电话呼叫(覆盖默认行为)

当用户按下呼叫按钮时从应用程序发出电话呼叫(覆盖默认行为)
EN

Stack Overflow用户
提问于 2011-01-21 14:20:10
回答 2查看 1.7K关注 0票数 1

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

这意味着有两个问题: 1)我可以拦截绿色的呼叫按钮吗? 2)我如何在应用程序中进行呼叫?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-06-06 20:15:58

在回答问题之前,假设您正在跟踪列表中当前选定的项目,并且您有一种查找相关电话号码的方法。

1) 截取呼叫按钮

您需要在管理器或屏幕中实现keyDown(int, int)方法,捕获正确的键代码,并返回true:

代码语言:javascript
复制
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()操作,将您希望呼叫的电话号码传递给它:

代码语言:javascript
复制
    PhoneArguments callArgs = new PhoneArguments(
        PhoneArguments.ARG_CALL, "+27 83 111 1234");
    Invoke.invokeApplication(Invoke.APP_TYPE_PHONE, callArgs);

因此,组合得到以下代码:

代码语言:javascript
复制
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);
    }
}
票数 4
EN

Stack Overflow用户

发布于 2011-01-28 05:02:12

来自Blackberry文档:

net.rim.blackberry.api.phone

公共最终类Phone扩展对象

该类提供了以下功能:

*用于与电话交互的高级实用程序

应用程序。您可以使用此类中的方法对电话应用程序进行更精细的操作。例如,将DTMF铃声插入活动呼叫。*访问设备上的多条线路。*将数据添加到来电和活动呼叫屏幕(如果支持)。

多行示例

示例A:交换线路

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

公共类MultiLineAction将MultiLineListener

  • Register类扩展为PhoneListener。

Phone.addPhoneListener(this);

  • Implement MultiLineListener回调,以便切换结果通知app。

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

  • Invoke Phone.setPreferredLine()。

Phone.setPreferredLine( Phone.getLineIds());

示例B:发起去电

  1. 调用Phone.initiateCall。

在应用程序关闭之前,从电话侦听器"5195550123");

  • Deregister Phone.initiateCall(Phone.getLineIds() )类。

Phone.removePhoneListener(this);

Category: Signed:只有签名的应用程序才能访问此元素。如果您打算使用此元素,请访问http://www.blackberry.com/go/codesigning以获取一组代码签名密钥。只有在BlackBerry智能手机上运行的应用程序才需要代码签名;在BlackBerry智能手机模拟器上的开发可以在没有代码签名的情况下进行。自: BlackBerry API 4.0.0

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4755983

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档