黑莓 - 从应用程序管理电话会议?

Posted

技术标签:

【中文标题】黑莓 - 从应用程序管理电话会议?【英文标题】:Blackberry - manage conference call from application? 【发布时间】:2011-01-19 13:59:31 【问题描述】:

如何从应用程序创建电话会议?

【问题讨论】:

让我建议 SuperUser(SO 的姊妹网站)作为这个问题的更好论坛:superuser.com 【参考方案1】:

我们必须:

开始通话 保持通话 开始新通话 加入会议 ...

要开始通话,请参阅来自Blackberry - make a call from native address book的api 没有 api 可以持有和加入,但我们可以使用 Blackberry - run menu item from dialer Phone App 技术 要将应用程序屏幕带回前台,我们可以使用来自Blackberry - Create an application which will lock another application event的代码

完整代码:

class Scr extends MainScreen implements PhoneListener 
    private static final String STR_MODULE_NAME = "SOConferenceCall";
    EditField mPhoneNumber = new EditField("phone number: ", "12345");
    boolean mConnected = false;
    Vector mPhoneCalls = new Vector();

    public Scr() 
        Phone.addPhoneListener(this);
        add(mPhoneNumber);
    

    protected void makeMenu(Menu menu, int instance) 
        super.makeMenu(menu, instance);

        if (isCalling()) 
            menu.add(new MenuItem("add to conference", 0, 0) 
                public void run() 
                    holdActiveCall();
                    makeCall(mPhoneNumber.getText());
                
            );
         else 
            menu.add(new MenuItem("call", 0, 0) 
                public void run() 
                    makeCall(mPhoneNumber.getText());
                
            );
        
    

    private void holdActiveCall() 
        runMenuItem("Hold");
    

    private void joinCalls() 
        runMenuItem("Join Conference");
    

    private void makeCall(String number) 
        PhoneArguments call = new PhoneArguments(PhoneArguments.ARG_CALL,
                number);
        Invoke.invokeApplication(Invoke.APP_TYPE_PHONE, call);
    

    private void runMenuItem(String menuItemText) 
        Screen screen = Ui.getUiEngine().getActiveScreen();
        Menu menu = screen.getMenu(0);
        for (int i = 0, cnt = menu.getSize(); i < cnt; i++)
            if (menu.getItem(i).toString().equalsIgnoreCase(menuItemText))
                menu.getItem(i).run();
    

    protected int switchToForeground() 
        int id = -1;
        ApplicationManager appMan 
            = ApplicationManager.getApplicationManager();
        ApplicationDescriptor appDes[] 
            = appMan.getVisibleApplications();
        for (int i = 0; i < appDes.length; i++) 
            Sreing name = appDes[i].getModuleName();
            if (name.equalsIgnoreCase(STR_MODULE_NAME)) 
                id = appMan.getProcessId(appDes[i]);
                appMan.requestForeground(id);
                // give a time to foreground application
                try 
                    Thread.sleep(1000);
                 catch (InterruptedException e) 
                    e.printStackTrace();
                
                break;
            
        
        return id;
    

    private boolean isCalling() 
        return mConnected;
    

    public void callAdded(int callId) 
        switchToForeground();
    

    public void callAnswered(int callId) 
        switchToForeground();
    

    public void callConferenceCallEstablished(int callId) 
        switchToForeground();
    

    public void callConnected(int callId) 
        if (mPhoneCalls.size() == 0)
            mConnected = true;
        else
            joinCalls();
        mPhoneCalls.addElement(Phone.getCall(callId));
        switchToForeground();

    

    public void callDirectConnectConnected(int callId) 
        switchToForeground();
    

    public void callDirectConnectDisconnected(int callId) 
        switchToForeground();
    

    public void callDisconnected(int callId) 
        mPhoneCalls.removeElement(Phone.getCall(callId));
        if (mPhoneCalls.size() == 0)
            mConnected = false;
        switchToForeground();
    

    public void callEndedByUser(int callId) 
        switchToForeground();
    

    public void callFailed(int callId, int reason) 
        switchToForeground();
    

    public void callHeld(int callId) 
        switchToForeground();
    

    public void callIncoming(int callId) 
        switchToForeground();
    

    public void callInitiated(int callid) 
        switchToForeground();
    

    public void callRemoved(int callId) 
        switchToForeground();
    

    public void callResumed(int callId) 
        switchToForeground();
    

    public void callWaiting(int callid) 
        switchToForeground();
    

    public void conferenceCallDisconnected(int callId) 
        switchToForeground();
    

【讨论】:

以上是关于黑莓 - 从应用程序管理电话会议?的主要内容,如果未能解决你的问题,请参考以下文章

韩国的KKT是啥,沈昌珉有

自动驾驶未来汽车将由软件来定义 黑莓QNX为自动驾驶安全性护航

使用Video Control在黑莓应用程序中捕获图片仅适用于模拟器而非设备

黑莓到底怎么样,为什么中国没大有人用

如何从黑莓的无头应用程序打开浏览器

SIEBEL应用概述