как записать звонок в blackberry? - PullRequest
0 голосов
/ 24 августа 2011

Я хочу создать приложение для записи звонков в Blackberry.При поиске на этом форуме я получил call-Recorder-in-Blackberry эту ссылку.Код, приведенный в ссылке ниже, понятен.

Это может быть глупый вопрос для вас, эксперты, но мой вопрос в том, как нам этот кусок кода.Я имею в виду объект MyScreen будет работать на UIApplication.Но как я могу сделать так, чтобы мой модуль запускался при запуске устройства и работал в фоновом режиме, ожидая вызова слушателя телефонного звонка.


Я использовал этот код ниже, он записывает вызов, но только если вызов находится в режиме громкой связи.Теперь, как я могу сделать то же самое, не переводя в режим громкого динамика.

import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.OutputStream;

import javax.microedition.io.Connector;
import javax.microedition.io.file.FileConnection;
import javax.microedition.media.Manager;
import javax.microedition.media.Player;
import javax.microedition.media.control.RecordControl;

import net.rim.blackberry.api.phone.Phone;
import net.rim.blackberry.api.phone.PhoneCall;
import net.rim.blackberry.api.phone.PhoneListener;
import net.rim.device.api.system.Application;
import net.rim.device.api.ui.component.Dialog;

public class CatchCall extends Application implements PhoneListener {

    Player player;
    RecordControl recorder;
    private ByteArrayOutputStream output;
    byte[] data;
    boolean yes = false;
    int st;

    public CatchCall() {
        Phone.addPhoneListener(this);
    }

    public static void main(String[] args) {
        new CatchCall().enterEventDispatcher();
    }

    public void callAdded(int callId) {
    }

    public void callAnswered(int callId) {
    }

    public void callConferenceCallEstablished(int callId) {
    }

    public void callConnected(int callId) {

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

    public void callDirectConnectConnected(int callId) {
    }

    public void callDirectConnectDisconnected(int callId) {
    }

    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 callEndedByUser(int callId) {
    }

    public void callFailed(int callId, int reason) {
    }

    public void callHeld(int callId) {
    }

    public void callIncoming(int callId) {
        Dialog.ask(Dialog.D_YES_NO, "Are u sure to record this call");
    }

    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;
        }

    }

    public void callRemoved(int callId) {
    }

    public void callResumed(int callId) {
    }

    public void callWaiting(int callid) {
    }

    public void conferenceCallDisconnected(int callId) {
    }

    private void initPlay() {
        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) {
            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);
            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;
    }
}

Ответы [ 2 ]

1 голос
/ 14 декабря 2012

Невозможно записать звук телефонного звонка (кроме громкой связи), как вы пытаетесь это сделать.Это намеренно.Для этого вам потребуется другой подход к устройству.Однако я могу ответить на другие ваши вопросы:

Чтобы запустить приложение автоматически, вы можете выполнить следующие действия: http://supportforums.blackberry.com/t5/Java-Development/Configure-an-application-to-start-automatically-when-the/ta-p/444748

Кроме того, так как это приложение выше не выходит из UiApplication, выследует также установить флажок «запускать как системный модуль», если вы следуете инструкциям выше.Таким образом, он не будет отображаться на ленте или в виде значка в списке приложений.

1 голос
/ 24 августа 2011

На самом деле прямая запись разговора невозможна с Blackberry.AFAIK, который отправил код записи разговора при разговоре по громкой связи.Это означает, что если на мобильном телефоне есть громкоговоритель, позвоните на громкоговоритель и запишите этот голос.И посмотрите на это обсуждение, Регистратор вызовов в Blackberry.

...