为什么电话录音得到的文件是空的

leo-H 发布于 2012/04/26 18:56
阅读 645
收藏 0

录音后相应目录下创建了.3gp文件,但大小为0。怎么回事?

public class PhoneRecordService extends Service {

	@Override
	public void onCreate() {
		TelephonyManager mgr = (TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE);
		mgr.listen(new PhoneStateListener() {
			
			private MediaRecorder recorder = null;
			private String num = null;
			
			@Override
			public void onCallStateChanged(int state, String incomingNumber) {
				switch(state) {
				case TelephonyManager.CALL_STATE_RINGING:
					num = incomingNumber;
					break;
				case TelephonyManager.CALL_STATE_OFFHOOK:
					try {
						File dir = new File(Environment.getExternalStorageDirectory(), "record_phone");
						if(! dir.isDirectory())
							dir.mkdirs();
						File file = new File(dir, num + "_" + System.currentTimeMillis() + ".3gp");
						recorder = new MediaRecorder();
						recorder.setAudioSource(AudioSource.VOICE_CALL);//声音采集来源(话筒)
						recorder.setOutputFormat(OutputFormat.THREE_GPP);//输出的格式
						recorder.setAudioEncoder(AudioEncoder.AMR_NB);//音频编码方式
						recorder.setOutputFile(file.getAbsolutePath());//输出方向
						recorder.prepare();
						recorder.start();
					} catch (Exception e) {
						e.printStackTrace();
					}
					break;
				case TelephonyManager.CALL_STATE_IDLE:
					if (recorder != null) {
						recorder.stop();
						recorder.release();
					}
					break;
				}
			}
			
		}, PhoneStateListener.LISTEN_CALL_STATE);
		
		super.onCreate();
	}
	
	@Override
	public IBinder onBind(Intent arg0) {
		// TODO Auto-generated method stub
		return null;
	}

}

加载中
0
愤怒的鱼儿
貌似要修改底层驱动吧~至少2.3上我直接这样不行
leo-H
leo-H
谢谢! 那要怎样啊?
0
Andre.Z
Andre.Z

你这个是内录???那要内核的支持,要支持内录的内核才行,不支持的手机要刷内核,另外,还得看系统支持不。
你想做个CallRecorder那样的玩意??

leo-H
leo-H
回复 @Andre.Z : 我在用2个模拟器一个拨打另一个。也就是要在真是手机上运行才能是吧?
Andre.Z
Andre.Z
回复 @leo_de_macondo : 汗,你说行不?
leo-H
leo-H
我只是在模拟器上运行
0
leo-H
leo-H
可能是模拟器的问题,有时候不行,不过后来试了试又可以了。。。
返回顶部
顶部