Tutorials Blackberry How to Record Incoming Phone Call in Blackberry

How to Record Incoming Phone Call in Blackberry

To record call in blackberry we should have the knowledge of PhoneListener interface to listen phone call events, Player class to record the call. And, finally FileConnection API to save the recorded file in file system.

One limitation of PhoneListener, it works fine while the call is in loudspeaker mode, but it doesn’t work normal mode.

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 {

	private Player player;
	private RecordControl recorder;
	private ByteArrayOutputStream output;
	private byte[] data;
	private boolean yes = false;
	private 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) {		
		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("Failed 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;
	}
}
Total
0
Shares
4 Comments
Oldest
Newest Most Voted
Inline Feedbacks
View all comments
Balamurali
Balamurali
9 years ago

Can i have the complete eclipse project ?

user
user
9 years ago
Reply to  Balamurali

Hey Balamurali, as roy said everything is straight forward to plug in your project. However find the link to my google code project

roy
roy
9 years ago

Balamurali do you want him to go to your home and install eclipse too? Jesus, he gives everything straight away!

user
user
9 years ago
Reply to  roy

Hey Roy thanks for following us. I have pasted the google code project link for Balamurali.

Previous Post
Blackberry Tutorials

How to create a custom ListField in blackberry

Next Post
Blackberry Tutorials

How to Block Incoming Call in Blackberry

Related Posts
By clicking “Allow All”, you agree to the storing of cookies on your device to enhance site navigation, analyze site usage, and assist in our marketing efforts. Cookie Notice
Allow All