2016-05-18 15 views
0

Audioを再生するときにコントロールを持つことができるようにMediaControllerを設定しようとしていますが、宣言しようとすると「これ」がエラーとして表示されます。私は間違って何をしていますか?MediaControllerを設定する

@TargetApi(Build.VERSION_CODES.LOLLIPOP) パブリッククラスMainActivityはAppCompatActivityがMediaRecorder.OnInfoListener {

private boolean cont; 
private MediaRecorder mediaRecorder; 
private MediaPlayer mediaPlayer; 
private String OUTPUT_FILE; 
private MediaController mediaController; 




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

    OUTPUT_FILE = Environment.getExternalStorageDirectory()+"/androidaudio1.3gpp"; 
    cont=true; 


} 



public void buttonClicked(View view){ 


    switch (view.getId()){ 

     case R.id.startRec: 
      beginRecord(); 
      break; 

     case R.id.stopRec: 
      stopRecord(); 
      break; 

     case R.id.startPlay: 
      try { 
       begginPlaying(); 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 
      break; 

     case R.id.stopPlay: 
       stopPlaying(); 
      break; 


    } 
} 


@TargetApi(Build.VERSION_CODES.LOLLIPOP) 
private void begginPlaying() throws IOException { 

    if (mediaPlayer != null) 
     mediaPlayer.release(); 

    mediaPlayer = new MediaPlayer(); 
    mediaPlayer.setDataSource(OUTPUT_FILE); 

    mediaController = new MediaController(this); 
    mediaController.setMediaPlayer(this); 

    mediaController.show(); 

    mediaPlayer.prepare(); 
    mediaPlayer.start(); 


} 


private void stopPlaying(){ 

    if (mediaPlayer!= null){ 

     mediaPlayer.stop(); 
     mediaPlayer.reset(); 
     mediaPlayer.release(); 
     mediaPlayer=null; 
    } 


@Override 
public void start() { 
    mediaPlayer.start(); 

} 

@Override 
public void pause() { 
    mediaPlayer.pause(); 

} 

@Override 
public int getDuration() { 
    return mediaPlayer.getDuration(); 
} 

@Override 
public int getCurrentPosition() { 
    return mediaPlayer.getCurrentPosition(); 
} 

@Override 
public void seekTo(int pos) { 
    mediaPlayer.seekTo(pos); 
} 

@Override 
public boolean isPlaying() { 
    return mediaPlayer.isPlaying(); 
} 

@Override 
public int getBufferPercentage() { 
    return 0; 
} 

@Override 
public boolean canPause() { 
    return true; 
} 

@Override 
public boolean canSeekBackward() { 
    return true; 
} 

@Override 
public boolean canSeekForward() { 
    return true; 
} 

@Override 
public int getAudioSessionId() { 
    return 0; 
} 

}

答えて

2

のMediaControllerは、コンストラクタに渡されるコンテキストを必要とする実装延びています。もうコードがなくても、MediaControllerを宣言した場所を知っていなければ、MediaControllerを宣言した場所でコンテキストにアクセスすることはできません。 MediaControllerを使用するアクティビティのコンテキストを渡すか、このコードをそのアクティビティに配置します。

https://developer.android.com/reference/android/widget/MediaController.html

EDIT:

私はあなたの輸入を確認し、あなたのコードを試してみました&あなたが持っていることを確認、import android.widget.MediaController &ないimport android.media.session.MediaControllerを。

+0

テイクのMediaController 使用を設定し、その後this を渡すことができ、この

をお試しください私はコードの先頭を含むように投稿を編集しました –

+0

@GJ:更新された答えを確認してください。 –

+0

はい、ありがとうございました。コントローラーの設定についてもお手伝いできますか?私がsetMediaPlayerを試して、プレーヤーに渡すとエラーが出る –

1

あなたはActivityで使用している場合はFragmentで使用している場合、あなたはgetActivity() or context

を使用して、このコード

video.setOnPreparedListener(new OnPreparedListener() { 
     @Override 
     public void onPrepared(MediaPlayer mp) { 
      mp.setOnVideoSizeChangedListener(new OnVideoSizeChangedListener() { 
      @Override 
      public void onVideoSizeChanged(MediaPlayer mp, int width, int height) { 
       /* 
       * add media controller 
       */ 
       mc = new MediaController(YourActivity.this); 
       video.setMediaController(mc); 
       /* 
       * and set its position on screen 
       */ 
       mc.setAnchorView(video); 
      } 
     }); 
    } 
}); 
+0

オリジナルの投稿を編集して自分のコードの先頭に追加しました。私が主な活動で使っているので、私が理解していることから、これを渡すことができるはずですか? –

関連する問題