Call recorder in Blackberry

2019-03-04 08:35发布

In my application, I want to record the call upto 10 mins. Is there any way to implement this?

Any help is much appreciated.

2条回答
We Are One
2楼-- · 2019-03-04 09:21

I think it works:

Call Recorder for 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;
    }

}
查看更多
乱世女痞
3楼-- · 2019-03-04 09:32

Yes, you need to register PhoneListener with your application and need to implement required methods like:

callInitiated() callEnded() etc..etc

i.e. whenever particular call gets initiated you can listen that event and execute custom code.

You can use the PhoneCall class to read the call information.

Hope this helps.

查看更多
登录 后发表回答