Android编程之利用服务实现电话监听的方法
程序员文章站
2023-12-04 08:53:46
本文实例讲述了android编程之利用服务实现电话监听的方法。分享给大家供大家参考,具体如下:
1. 启动模拟器,部署应用
2. 利用模拟器控制器发送短信启动服务(查看...
本文实例讲述了android编程之利用服务实现电话监听的方法。分享给大家供大家参考,具体如下:
1. 启动模拟器,部署应用
2. 利用模拟器控制器发送短信启动服务(查看日志输出判断是否成功)
3. 向模拟器拨打电话,并接听,挂断电话后,利用文件管理查看对应的cache目录或者sdcard中生成了3gp文件,并将其复制到pc中播放以验证。
清单设置(一个receiver,一个service,若干权限)
<uses-permission android:name="android.permission.read_phone_state"/> <uses-permission android:name="android.permission.record_audio"/> <uses-permission android:name="android.permission.mount_unmount_filesystems"/> <uses-permission android:name="android.permission.write_external_storage"/> <uses-permission android:name="android.permission.receive_sms"/> … <application …> <receiver android:name="bootbroadcastreceiver"> <intent-filter> <action android:name="android.provider.telephony.sms_received"/> </intent-filter> </receiver> <service android:name="phonelistenerservice" />
电话监听器服务类:phonelistenerservice
package cn.class3g.phonelistener; ... public class phonelistenerservice extends service { public ibinder onbind(intent arg0) { return null; } public void oncreate() { super.oncreate(); log.i("tag", "服务启动了"); // 对电话的来电状态进行监听 telephonymanager telmanager = (telephonymanager) this.getsystemservice(context.telephony_service); // 注册一个监听器对电话状态进行监听 telmanager.listen(new myphonestatelistener(), phonestatelistener.listen_call_state); } private class myphonestatelistener extends phonestatelistener { mediarecorder recorder; file audiofile; string phonenumber; public void oncallstatechanged(int state, string incomingnumber) { switch (state) { case telephonymanager.call_state_idle: /* 无任何状态时 */ if (recorder != null) { recorder.stop();// 停止刻录 recorder.reset();// 重设 recorder.release();// 刻录完成一定要释放资源 } break; case telephonymanager.call_state_offhook: /* 接起电话时 */ try { recorder = new mediarecorder(); recorder.setaudiosource(mediarecorder.audiosource.mic); // 设置音频采集原 recorder.setoutputformat(mediarecorder.outputformat.three_gpp);// 内容输出格式 recorder.setaudioencoder(mediarecorder.audioencoder.amr_nb); // 音频编码方式 // recorder.setoutputfile("/sdcard/myvoice.amr"); audiofile = new file( environment.getexternalstoragedirectory(), phonenumber + "_" + system.currenttimemillis() + ".3gp"); recorder.setoutputfile(audiofile.getabsolutepath()); log.i("tag", audiofile.getabsolutepath()); recorder.prepare(); // 预期准备 recorder.start(); } catch (illegalstateexception e) { e.printstacktrace(); } catch (ioexception e) { e.printstacktrace(); } break; case telephonymanager.call_state_ringing: /* 电话进来时 */ phonenumber = incomingnumber; break; default: break; } super.oncallstatechanged(state, incomingnumber); } } }
利用开机启动广播启动服务(实验环境中为了方便起见可以先改用短消息广播)
开机启动完成广播action
复制代码 代码如下:
<action android:name="android.intent.action.boot_completed"/>
package cn.class3g.phonelistener; ... public class bootbroadcastreceiver extends broadcastreceiver { public void onreceive(context context, intent intent) { log.i("tag", "广播被接收了"); intent serviceintent = new intent(context, phonelistenerservice.class); context.startservice(serviceintent); } }
希望本文所述对大家android程序设计有所帮助。
上一篇: 为什么网站推广软文越来越受欢迎?或是这5个原因影响
下一篇: 如何做好企业推广?