-1
我不確定此代碼爲什麼會一直崩潰。我甚至無法打開它。有什麼建議?
我正嘗試進行多軌錄音。在這裏我包含了4個音軌按鈕(播放,停止和錄製)。程序在運行時發生崩潰(使用mediaRecoder和播放器)
package com.audiwave.joe.multitrackaudio;
import android.content.DialogInterface;
import android.media.MediaPlayer;
import android.media.MediaRecorder;
import android.os.Environment;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import java.io.File;
import java.io.IOException;
public class MainActivity extends AppCompatActivity {
//MediaPlayer
private MediaPlayer mediaPlayer;
private MediaRecorder recorder;
//FileName
private String OUTPUTFILE;
@Override
protected void onCreate(Bundle savedInstanceState) {
//Buttons
final Button track1= (Button) findViewById(R.id.track_1);
final Button track2= (Button) findViewById(R.id.track_2);
final Button track3= (Button) findViewById(R.id.track_3);
final Button track4= (Button) findViewById(R.id.track_4);
final Button Record= (Button) findViewById(R.id.Record);
final Button Play= (Button) findViewById(R.id.Play);
final Button Stop= (Button) findViewById(R.id.Stop);
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
OUTPUTFILE= Environment.getExternalStorageDirectory()+"/audiorecorder.3gp";
//track 1 recording
track1.setOnClickListener(new View.OnClickListener(){
public void onClick(View v){
if(R.id.Record==1){
try{
startRecording();
} catch (Exception e){
e.printStackTrace();
}
}
}
});
//track 2 recording
track2.setOnClickListener(new View.OnClickListener(){
public void onClick(View v){
if(R.id.Record==1){
try{
startRecording();
} catch (Exception e){
e.printStackTrace();
}
}
}
});
//track 3 recording
track3.setOnClickListener(new View.OnClickListener(){
public void onClick(View v){
if(R.id.Record==1){
try{
startRecording();
} catch (Exception e){
e.printStackTrace();
}
}
}
});
//track 4 recording
track4.setOnClickListener(new View.OnClickListener(){
public void onClick(View v){
if(R.id.Record==1){
try{
startRecording();
} catch (Exception e){
e.printStackTrace();
}
}
}
});
//Play recording
Play.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
try
{
mediaPlayer=new MediaPlayer();
mediaPlayer.setDataSource(OUTPUTFILE);
mediaPlayer.prepare();
mediaPlayer.start();
}
catch(Exception e){
e.printStackTrace();
}
}
});
//Stop recording
Stop.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
if (mediaPlayer != null)
mediaPlayer.stop();
}
});
}
private void startRecording() {
File outFile= new File(OUTPUTFILE);
recorder= new MediaRecorder();
recorder.setAudioSource(MediaRecorder.AudioSource.MIC);
recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_WB);
recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
recorder.setOutputFile(OUTPUTFILE);
//prepare recorder
try{
recorder.prepare();
} catch (IOException e){
e.printStackTrace();
}
//start recorder
recorder.start();
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu_main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
//noinspection SimplifiableIfStatement
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
}
你真的應該告訴我們你的logcat輸出。你甚至沒有說錯誤是什麼。 – csmckelvey
當控制檯崩潰時,會出現什麼類型的錯誤? – GAntoine
也許這些按鈕必須在'onCreate'方法之外聲明,然後只在'setContent' –