Android编程实现通话录音功能的方法
程序员文章站
2023-11-29 08:37:46
本文实例讲述了android编程实现通话录音功能的方法。分享给大家供大家参考,具体如下:
因受系统限制,只能录自已麦的声音,录不到对方的声音,可能需要改内核才能实现双向录...
本文实例讲述了android编程实现通话录音功能的方法。分享给大家供大家参考,具体如下:
因受系统限制,只能录自已麦的声音,录不到对方的声音,可能需要改内核才能实现双向录音;
接通电话和挂断电话时,震动一下;
使用广播接收者实现自启动;
服务代码:
package com.eboy.phonelistener; import java.io.file; import android.app.service; import android.content.context; import android.content.intent; import android.media.mediarecorder; import android.os.environment; import android.os.ibinder; import android.os.vibrator; import android.telephony.phonestatelistener; import android.telephony.telephonymanager; import android.widget.toast; public class phoneservice extends service { @override public ibinder onbind(intent arg0) { // todo auto-generated method stub return null; } @override public void oncreate() { // todo auto-generated method stub super.oncreate(); telephonymanager telephonymanager = (telephonymanager) getsystemservice(context.telephony_service); telephonymanager.listen(new phonelistener(), phonestatelistener.listen_call_state); } private final class phonelistener extends phonestatelistener{ private mediarecorder mediarecorder; private file file; private vibrator vibrator = (vibrator) getsystemservice(vibrator_service); @override public void oncallstatechanged(int state, string incomingnumber) { try { switch (state){ case telephonymanager.call_state_ringing: //来电 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(); toast.maketext(getapplicationcontext(), "电话已接通,开始录音。", toast.length_short).show(); //震动一下 vibrator.vibrate(100); break; case telephonymanager.call_state_idle: //挂断电话 if (mediarecorder != null){ mediarecorder.stop(); mediarecorder.release(); mediarecorder = null; toast.maketext(getapplicationcontext(), "电话已挂断,录音停止。", toast.length_short).show(); //震动一下 vibrator.vibrate(100); } break; } }catch (exception e) { e.printstacktrace(); } } } }
通过广播接收者实现自启动,代码:
package com.eboy.phonelistener; import android.content.context; import android.content.intent; public class broadcastreceiver extends android.content.broadcastreceiver { @override public void onreceive(context arg0, intent arg1) { intent service = new intent(arg0, phoneservice.class); arg0.startservice(service); } }
main.xml:
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.eboy.phonelistener" android:versioncode="1" android:versionname="1.0"> <uses-sdk android:minsdkversion="7" android:targetsdkversion="15" /> <application android:label="@string/app_name" android:icon="@drawable/ic_launcher" android:theme="@style/apptheme"> <service android:name=".phoneservice"></service> <receiver android:name=".broadcastreceiver"> <intent-filter > <action android:name="android.intent.action.boot_completed"/> </intent-filter> </receiver> </application> <!-- 读取电话状态权限 --> <uses-permission android:name="android.permission.read_phone_state"/> <!-- sd卡读写权限 --> <uses-permission android:name="android.permission.mount_unmount_filesystems"/> <uses-permission android:name="android.permission.write_external_storage"/> <!-- 录音权限 --> <uses-permission android:name="android.permission.record_audio"/> <!-- 震动权限 --> <uses-permission android:name="android.permission.vibrate"/> </manifest>
更多关于android相关内容感兴趣的读者可查看本站专题:《android多媒体操作技巧汇总(音频,视频,录音等)》、《android开发入门与进阶教程》、《android视图view技巧总结》、《android编程之activity操作技巧总结》、《android操作json格式数据技巧总结》、《android文件操作技巧汇总》、《android资源操作技巧汇总》及《android控件用法总结》
希望本文所述对大家android程序设计有所帮助。
下一篇: Apple Watch怎么同步导入音乐?