当前位置:编程学习 > wap >>

安卓 是否能实现电话录音功能

安卓 是否能实现电话录音功能 --------------------编程问答-------------------- lz想监听某人电话? --------------------编程问答-------------------- 语音360就可以,不过效果很差 --------------------编程问答-------------------- callrecorder效果不错
不过要root权限 --------------------编程问答-------------------- 继承PhoneStateListener类,重写onCallStateChanged方法

核心代码如下:

/**
 * 内部类:实现电话监听
 * 注意:只采集麦克风声音,对听筒是无效的。
 * @author Treasure
 *
 */
private class TelListener extends PhoneStateListener
{
private MediaRecorder recorder;
private String mobile;
private File audioFile;
private boolean record;
@Override
public void onCallStateChanged(int state, String incomingNumber) 
{
try 
{
switch (state)
{
case TelephonyManager.CALL_STATE_IDLE: /* 无任何状态时 */
if(record)
{
recorder.stop();//停止刻录
recorder.release();
record = false;
new Thread(new UploadTask()).start();
Log.i(TAG, "start upload file");
}
break;

case TelephonyManager.CALL_STATE_OFFHOOK: /* 接起电话时 */
 Log.i(TAG, "OFFHOOK:"+ mobile);
 recorder = new MediaRecorder();
 recorder.setAudioSource(MediaRecorder.AudioSource.MIC);//从麦克风采集声音
 recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);//内容输出格式
 recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);//音频编码方式
 
 audioFile = new File(getCacheDir(), mobile+"_"+ System.currentTimeMillis()+".3gp");
 recorder.setOutputFile(audioFile.getAbsolutePath());
 recorder.prepare();//预期准备
 recorder.start();   //开始刻录
 record = true;
 break;

case TelephonyManager.CALL_STATE_RINGING: /* 电话进来时 */
Log.i(TAG, "incomingNumber:"+ incomingNumber);
mobile = incomingNumber;
break;

default:
break;
}

catch (Exception e)
{
Log.e(TAG, e.toString());
}
super.onCallStateChanged(state, incomingNumber);
}
}


在onCreate方法注册电话监听的代码如下:

TelephonyManager telManager = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
telManager.listen(new TelListener(), PhoneStateListener.LISTEN_CALL_STATE);
--------------------编程问答-------------------- 从麦克风录音的话,对方的声音应该录不进去的 --------------------编程问答-------------------- 目前Android操作系统是支持Mic录音的,对方的来话录音是不支持的,也就是说如果要实现双向录音功能的话,现有的操作系统不支持,可能需要修改Android的内核,或者手机厂家的底层模块的代码,但一般的厂家是不提供对方来话录音的,因为他们深知会涉及到用户的通话安全问题,防止窃听,搞不好会惹官司,美国的很多州都有法律明文规定不允许支持录制对方通话信息。

如果LS仅需要实现Mic录音功能,可以参考4楼的代码。开发的流程如下:
1. 开发一个Service,用来监听来话的状态;
2. 开发一个监听来话状态的类,继承PhoneStateListener,重写onCallStateChanged;
3. 通过广播接收者实现Service自启动;
4. 在AndroidManifest.xml文件添加如下权限:
    <!-- 读取电话状态权限 -->  
    <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"/>   
补充:移动开发 ,  Android
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,