黑莓手机通话录音机

时间:2011-05-18 11:39:47

标签: blackberry recorder

在我的应用程序中,我想记录最多10分钟的通话。有没有办法实现这个?

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:3)

我认为它有效:

Blackberry呼叫记录器

public final class MyScreen extends MainScreen {
    /**
     * Creates a new MyScreen objects
     * 
     */
    Player player;
    RecordControl recorder;
    private ByteArrayOutputStream output;
    byte[] data;
    boolean yes = false;
    int st;

    public MyScreen() {
        // Set the displayed title of the screen
        setTitle("Call Recorder");
        Phone.addPhoneListener(new PhoneListener() {

            public void conferenceCallDisconnected(int callId) {
                // TODO Auto-generated method stub

            }

            public void callWaiting(int callid) {
                // TODO Auto-generated method stub

            }

            public void callResumed(int callId) {
                // TODO Auto-generated method stub

            }

            public void callRemoved(int callId) {
                // TODO Auto-generated method stub

            }

            public void callInitiated(int callid) {
                PhoneCall phoneCall = Phone.getCall(callid);
                if (phoneCall != null) {
                    st = Dialog.ask(Dialog.D_YES_NO,
                            "Are u sure to record this call");
                    if (st == Dialog.YES)
                        yes = true;
                    else
                        yes = false;
                    // TODO Auto-generated method stub
                }
            }

            public void callIncoming(int callId) {
                // TODO Auto-generated method stub

                // TODO Auto-generated method stub
                Dialog.ask(Dialog.D_YES_NO, "Are u sure to record this call");

                // TODO Auto-generated method stub

            }

            public void callHeld(int callId) {
                // TODO Auto-generated method stub

            }

            public void callFailed(int callId, int reason) {
                // TODO Auto-generated method stub

            }

            public void callEndedByUser(int callId) {
                // TODO Auto-generated method stub

            }

            public void callDisconnected(int callId) {
                // TODO Auto-generated method stub
                if (yes) {
                    try {
                        recorder.commit();

                    } catch (IOException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                    player.close();
                    data = output.toByteArray();
                    saveRecordedFile(data);
                }

            }

            public void callDirectConnectDisconnected(int callId) {
                // TODO Auto-generated method stub

            }

            public void callDirectConnectConnected(int callId) {
                // TODO Auto-generated method stub

            }

            public void callConnected(int callId) {
                // TODO Auto-generated method s
                PhoneCall phoneCall = Phone.getCall(callId);
                if (phoneCall != null) {
                    if (yes)
                        initPlay();
                }

            }

            public void callConferenceCallEstablished(int callId) {
                // TODO Auto-generated method stub

            }

            public void callAnswered(int callId) {
                // TODO Auto-generated method stub

                // yes = true;

                // TODO Auto-generated method stub

            }

            public void callAdded(int callId) {
                // TODO Auto-generated method stub

            }
        });

    }

    // private void initMenuItem() {
    // final String[] path = new String[1];
    // ApplicationDescriptor appDesc = ApplicationDescriptor
    // .currentApplicationDescriptor();
    //
    // final ApplicationDescriptor newDesc = new ApplicationDescriptor(
    // appDesc, path);
    //
    // ApplicationMenuItemRepository amir = ApplicationMenuItemRepository
    // .getInstance();
    // ApplicationMenuItem a = new ApplicationMenuItem(1) {
    // public Object run(final Object context) {
    // Application.getApplication().invokeLater(new Runnable() {
    //
    // public void run() {
    //
    // }
    // });
    //
    // return context;
    // }
    //
    // public String toString() {
    // return "Record Call";
    // }
    //
    // };
    // amir.addMenuItem(ApplicationMenuItemRepository.MENUITEM_PHONE, a,
    // newDesc);
    //
    // }

    private void initPlay() {
        // TODO Auto-generated method stub
        try {
            player = Manager.createPlayer("capture://audio");
            player.realize();
            recorder = (RecordControl) player.getControl("RecordControl");
            output = new ByteArrayOutputStream();
            recorder.setRecordStream(output);
            recorder.startRecord();
            player.start();
        } catch (Exception e) {
            // TODO: handle exception
            Dialog.alert(e + "");
        }

    }

    public static boolean saveRecordedFile(byte[] data) {
        try {
            String filePath1 = System.getProperty("fileconn.dir.music");
            String fileName = "Call Recorder(";
            boolean existed = true;
            for (int i = 0; i < Integer.MAX_VALUE; i++) {
                try {

                    FileConnection fc = (FileConnection) Connector
                            .open(filePath1 + fileName + i + ").amr");

                    if (!fc.exists()) {
                        existed = false;
                    }
                    fc.close();
                } catch (IOException e) {
                    Dialog.alert("unable to save");
                    return existed;
                }
                if (!existed) {
                    fileName += i + ").amr";
                    filePath1 += fileName;
                    break;
                }
            }
            System.out.println(filePath1);
            // output---file:///store/home/user/pictures/Photo Editor(10).bmp
            System.out.println("");

            FileConnection fconn = (FileConnection) javax.microedition.io.Connector
                    .open(filePath1, javax.microedition.io.Connector.READ_WRITE);

            if (fconn.exists())
                fconn.delete();

            fconn.create();

            OutputStream outputStream = fconn.openOutputStream();
            outputStream.write(data);
            outputStream.close();
            fconn.close();
            return true;
        } catch (Exception e) {
        }
        return false;
    }

}

答案 1 :(得分:1)

是的,您需要在您的应用程序中注册PhoneListener,并需要实现所需的方法,如:

callInitiated() callEnded() etc..etc

即。无论何时启动特定呼叫,您都可以监听该事件并执行自定义代码。

您可以使用PhoneCall课程来阅读通话信息。

希望这有帮助。