Grabadora de llamadas en Blackberry
recorder (2)
En mi aplicación, quiero grabar la llamada hasta 10 minutos. ¿Hay alguna forma de implementar esto?
Cualquier ayuda es muy apreciada.
Creo que funciona:
Grabadora de llamadas para 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;
}
}
Sí, necesita registrar PhoneListener
con su aplicación y necesita implementar los métodos necesarios, como:
callInitiated()
callEnded()
etc..etc
es decir, cada vez que se inicia una llamada en particular, puede escuchar ese evento y ejecutar un código personalizado.
Puede usar la clase PhoneCall
para leer la información de la llamada.
Espero que esto ayude.