问题描述
我需要一个通话记录器。我有一些代码。但它不会在呼叫开始或结束时开始。我没有添加任何与此相关的内容。有时它已损坏。我从各种来源构建了这段代码。请添加详细信息,以便在通话开始时开始并在通话结束时结束。那么为什么它有时会损坏?我也使用 mp4 格式。我想使用 mp3 格式。我应该做哪些改变?
我的代码:
public class MainActivity extends AppCompatActivity {
MediaRecorder recorder = null;
private static final String AUdio_RECORDER_FILE_EXT_3GP = ".3gp";
private static final String AUdio_RECORDER_FILE_EXT_MP4 = ".mp4";
private static final String AUdio_RECORDER_FOLDER = "AudioRecorder";
private int currentFormat = 0;
private int output_formats[] = { MediaRecorder.OutputFormat.MPEG_4,MediaRecorder.OutputFormat.THREE_GPP };
private String file_exts[] = { AUdio_RECORDER_FILE_EXT_MP4,AUdio_RECORDER_FILE_EXT_3GP };
String RECORD_DIRECTORY = "Call Records";
static final int REQUEST = 112;
Context mContext;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mContext = this;
if (Build.VERSION.SDK_INT >= 23) {
String[] PERMISSIONS = {android.Manifest.permission.CALL_PHONE,android.Manifest.permission.READ_PHONE_STATE,android.Manifest.permission.READ_EXTERNAL_STORAGE,android.Manifest.permission.RECORD_AUdio,android.Manifest.permission.MODIFY_AUdio_SETTINGS,android.Manifest.permission.WRITE_EXTERNAL_STORAGE,android.Manifest.permission.PROCESS_OUTGOING_CALLS};
if (!hasPermissions(this,PERMISSIONS)) {
ActivityCompat.requestPermissions((Activity) this,PERMISSIONS,REQUEST );
startMediaRecorder();
} else {
//do here
startMediaRecorder();
}
} else {
//do here
startMediaRecorder();
}
}
private boolean startMediaRecorder(){
recorder = new MediaRecorder();
try{
recorder.reset();
recorder.setAudioSource(MediaRecorder.AudioSource.MIC);
recorder.setAudioSamplingRate(8000);
recorder.setAudioEncodingBitRate(12200);
recorder.setoutputFormat(output_formats[currentFormat]);
recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
recorder.setoutputFile(getFilename());
MediaRecorder.OnErrorListener errorListener = new MediaRecorder.OnErrorListener() {
public void onError(MediaRecorder arg0,int arg1,int arg2) {
//Log.e(TAG,"OnErrorListener " + arg1 + "," + arg2);
terminateAndEraseFile();
}
};
recorder.setonErrorListener(errorListener);
MediaRecorder.OnInfoListener infoListener = new MediaRecorder.OnInfoListener() {
public void onInfo(MediaRecorder arg0,"OnInfoListener " + arg1 + "," + arg2);
terminateAndEraseFile();
}
};
recorder.setonInfoListener(infoListener);
recorder.prepare();
// Sometimes prepare takes some time to complete
Thread.sleep(2000);
recorder.start();
//isRecordStarted = true;
return true;
}catch (Exception e){
e.getMessage();
terminateAndEraseFile();
return false;
}
}
private String getFilename() {
File MediaDirectory = new File( Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_MUSIC),RECORD_DIRECTORY );
// have the object build the directory structure,if needed.
if (!MediaDirectory.exists()) {
Log.d("dirrrrrr","" + MediaDirectory.mkdirs());
MediaDirectory.mkdirs();
}
return (MediaDirectory + "/" + System.currentTimeMillis() + file_exts[currentFormat]);
}
private void terminateAndEraseFile(){
try{
if (null != recorder) {
recorder.stop();
recorder.reset();
recorder.release();
recorder = null;
}
}catch(RuntimeException stopException){
}
}
private static boolean hasPermissions(Context context,String... permissions) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && context != null && permissions != null) {
for (String permission : permissions) {
if (ActivityCompat.checkSelfPermission(context,permission) != PackageManager.PERMISSION_GRANTED) {
return false;
}
}
}
return true;
}
@Override
public void onRequestPermissionsResult(int requestCode,@NonNull String[] permissions,@NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode,permissions,grantResults);
switch (requestCode) {
case REQUEST: {
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
//do here
Toast.makeText(mContext,"The app was allowed to read your store.",Toast.LENGTH_LONG).show();
} else {
Toast.makeText(mContext,"The app was not allowed to read your store.",Toast.LENGTH_LONG).show();
}
}
}
}
}
Manifest.xml:
<uses-permission android:name="android.permission.CALL_PHONE" />
<uses-permission android:name="android.permission.PROCESS_OUTGOING_CALLS" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.RECORD_AUdio" />
<uses-permission android:name="android.permission.MODIFY_AUdio_SETTINGS"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)