测试通话中录音,有存下档案是有容量的,但播放时有跑....没声音!
以下是程式码,请各位高手帮解惑!package com.halleluja.phone;import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;public class BootBroadcastReceiver extends BroadcastReceiver {@Override
public void onReceive(Context context, Intent intent) {
System.out.println("broadcast");
Intent service = new Intent(context, PhoneListenerService.class);
context.startService(service);
}}
package com.halleluja.phone;import java.text.SimpleDateFormat;
import java.util.Date;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.telephony.PhoneStateListener;
import android.telephony.TelephonyManager;
import android.util.Log;public class PhoneListenerService extends Service {private static final String SDPATH = Environment.getExternalStorageDirectory() + "/";
private static final String TAG = "PhoneListenerService";@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
public void onCreate() {
super.onCreate();TelephonyManager telephonyManager = (TelephonyManager) this.getSystemService(Context.TELEPHONY_SERVICE);PhoneStateListener stateListener = new PhoneStateListener() {
private MediaRecorder recorder;
private String incomingNumber;
@Override
public void onCallStateChanged(int state, String incomingNumber) {
switch(state) {
case TelephonyManager.CALL_STATE_IDLE :
if(recorder != null){
this.incomingNumber = null;
recorder.stop();
recorder.release();
}break;
case TelephonyManager.CALL_STATE_OFFHOOK :
Log.i(TAG, "start record");
try {
recorder.setAudioSource(MediaRecorder.AudioSource.MIC);
recorder.setOutputFormat(MediaRecorder.OutputFormat.RAW_AMR);
recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
SimpleDateFormat format = new SimpleDateFormat("yymmddhhmms");
//保存的文件名
String filename = this.incomingNumber + "_" + format.format(new Date()) + ".amr";
//文件保存位置
recorder.setOutputFile(SDPATH + filename);
recorder.prepare();
recorder.start();
} catch (Exception e) {
Log.e(TAG, e.toString());
}
break;
case TelephonyManager.CALL_STATE_RINGING :
Log.i(TAG, "new ring");
this.incomingNumber = incomingNumber;
recorder = new MediaRecorder();
break;
}super.onCallStateChanged(state, incomingNumber);
}
};
Log.i(TAG, "start listener");
telephonyManager.listen(stateListener, PhoneStateListener.LISTEN_CALL_STATE);
}}