2016-09-18 80 views
0

我有兩個獨立的活動,recording.javaaudio.java共享相同的XML。我應該怎麼做才能在一項活動中將它們結合在一起?或者還有其他方法嗎?請告訴我。謝謝。Android:共享一個佈局的兩個活動

下面的代碼:

Recording.java

public class Recording extends Activity { 
    private static final String LOG_TAG = "Audio"; 
    private static String FileName = null; 

    private RecordButton RecordButton = null; 
    private MediaRecorder Recorder = null; 

    private PlayButton PlayButton = null; 
    private MediaPlayer Player = null; 

    private void onRecord(boolean start) { 
     if (start) { 
      startRecording(); 
     } else { 
      stopRecording(); 
     } 
    } 

    private void onPlay(boolean start) { 
     if (start) { 
      startPlaying(); 
     } else { 
      stopPlaying(); 
     } 
    } 

    private void startPlaying() { 
     Player = new MediaPlayer(); 
     try { 
      Player.setDataSource(FileName); 
      Player.prepare(); 
      Player.start(); 
     } catch (IOException e) { 
      Log.e(LOG_TAG, "prepare() failed"); 
     } 
    } 

    private void stopPlaying() { 
     Player.release(); 
     Player = null; 
    } 

    private void startRecording() { 
     Recorder = new MediaRecorder(); 
     Recorder.setAudioSource(MediaRecorder.AudioSource.MIC); 
     Recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP); 
     Recorder.setOutputFile(FileName); 
     Recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB); 

     try { 
      Recorder.prepare(); 
     } catch (IOException e) { 
      Log.e(LOG_TAG, "prepare() failed"); 
     } 

     Recorder.start(); 
    } 

    private void stopRecording() { 
     Recorder.stop(); 
     Recorder.release(); 
     Recorder = null; 
    } 

    class RecordButton extends Button { 
     boolean StartRecording = true; 

     OnClickListener clicker = new OnClickListener() { 
      public void onClick(View v) { 

       onRecord(StartRecording); 
       if (StartRecording) { 
        setText("Stop Record"); 
        PlayButton.setEnabled(false); 
       } else { 
        setText("Start Record"); 
        PlayButton.setEnabled(true); 
       } 
       StartRecording = !StartRecording; 


      } 
     }; 

     public RecordButton(Context ctx) { 
      super(ctx); 
      setText("Start Record"); 
      setOnClickListener(clicker); 
     } 
    } 

    class PlayButton extends Button { 
     boolean StartPlaying = true; 

     OnClickListener clicker = new OnClickListener() { 
      public void onClick(View v) { 
       onPlay(StartPlaying); 
       if (StartPlaying) { 
        setText("Stop Playing"); 
        RecordButton.setEnabled(false); 
       } else { 
        setText("Start Playing"); 
        RecordButton.setEnabled(true); 

       } 
       StartPlaying = !StartPlaying; 
      } 
     }; 

     public PlayButton(Context ctx) { 
      super(ctx); 
      setText("Start Playing"); 
      setOnClickListener(clicker); 
     } 
    } 

    public Recording() { 
     FileName = Environment.getExternalStorageDirectory().getAbsolutePath(); 
     FileName += "/audiorecording.3gp"; 
    } 

    @Override 
    public void onCreate(Bundle icicle) { 
     super.onCreate(icicle); 
     setContentView(R.layout.main_layout); 

     LinearLayout container = (LinearLayout) findViewById(R.id.container); 


     LinearLayout audio = new LinearLayout(this); 

     audio.setGravity(Gravity.BOTTOM | Gravity.CENTER); 

     RecordButton = new RecordButton(this); 
     audio.addView(RecordButton, 
       new LinearLayout.LayoutParams(
         ViewGroup.LayoutParams.WRAP_CONTENT, 
         ViewGroup.LayoutParams.WRAP_CONTENT, 
         Gravity.CENTER | Gravity.BOTTOM)); 

     PlayButton = new PlayButton(this); 
     audio.addView(PlayButton, 
       new LinearLayout.LayoutParams(
         ViewGroup.LayoutParams.WRAP_CONTENT, 
         ViewGroup.LayoutParams.WRAP_CONTENT, 
         Gravity.CENTER | Gravity.BOTTOM)); 


     container.addView(audio); 
    } 

    @Override 
    public void onPause() { 
     super.onPause(); 
     if (Recorder != null) { 
      Recorder.release(); 
      Recorder = null; 
     } 

     if (Player != null) { 
      Player.release(); 
      Player = null; 
     } 
    } 
} 

Audio.java

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main_layout); 

    imageButton1 = (ImageButton) findViewById(R.id.imageButton1); 
    imageButton2 = (ImageButton)findViewById(R.id.imageButton2); 

    final MediaPlayer sound = MediaPlayer.create(Audio.this, R.raw.audio1); 

    imageButton1.setOnClickListener (new View.OnClickListener(){ 
     @Override 
     public void onClick(View v){ 
      sound.start(); 
     } 

    }); 

    imageButton2.setOnClickListener (new View.OnClickListener(){ 
     @Override 
     public void onClick(View v){ 
      sound.pause(); 
     } 
    }); 
    } 
} 

audio.xml

<Button 
    android:id="@+id/Play" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:layout_marginTop="130dp" 
    android:background="#54C571" 
    android:text="Next" 
    android:textColor="#FFFFFF" 
    android:textSize="23sp" 
    android:textStyle="bold" /> 

<Button 
    android:id="@+id/Pause" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:layout_marginTop="180dp" 
    android:background="#54C571" 
    android:text="Next" 
    android:textColor="#FFFFFF" 
    android:textSize="23sp" 
    android:textStyle="bold" /> 

回答

1

給你的代碼短期看後看起來你在一項活動中錄製一些音頻,並在另一項活動中播放音頻。如果你想在一個活動中實現這兩個功能,那麼你可以將這兩個活動作爲片段並將其顯示爲一個單獨的活動。

+0

是的,錄製活動和播放音頻活動。我會研究它。謝謝@Passiondroid –

1

我認爲Fragment將是在這種情況下的最佳選擇。將你的兩個活動變成碎片並進行另一個活動以包含它們。