Tuesday, December 27, 2011

seekBar to control the volume of Video Player

Firstly say that you can download the source code example below at the end of this post.




In order to create a volume control using SeekBar, we have to know the maximum volume and current volume. It can be retrieved using the method audioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC) and audioManager.getStreamVolume(AudioManager.STREAM_MUSIC). And we can change the volume when SeekBar changed, using the method audioManager.setStreamVolume(AudioManager.STREAM_MUSIC, volume index, flags).

Firstly, modify main.xml to add a SeekBar as Volume Control.
Code:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 android:orientation="vertical"
 android:layout_width="fill_parent"
 android:layout_height="fill_parent"
 >
<TextView
 android:layout_width="fill_parent"
 android:layout_height="wrap_content"
 android:text="@string/hello"
 />
<LinearLayout
 android:orientation="horizontal"
 android:layout_height="wrap_content"
 android:layout_width="fill_parent"
 >
<Button
 android:id="@+id/playvideoplayer"
 android:layout_width="0dip"
 android:layout_height="wrap_content"
 android:layout_weight="1"
 android:text="- PLAY Video -"
 />
<Button
 android:id="@+id/pausevideoplayer"
 android:layout_width="0dip"
 android:layout_height="wrap_content"
 android:layout_weight="1"
 android:text="- PAUSE Video -"
 />
</LinearLayout>
<SeekBar
 android:id="@+id/volbar"
 android:layout_width="fill_parent"
 android:layout_height="wrap_content"
 android:layout_margin="10px"
 />
<SurfaceView
 android:id="@+id/surfaceview"
 android:layout_width="fill_parent"
 android:layout_height="wrap_content"
 />
</LinearLayout>




Modify AndroidVideoPlayer to handle the SeekBar as Volume Control.
Code:

package com.exercise.AndroidVideoPlayer;

import java.io.IOException;

import android.app.Activity;
import android.content.Context;
import android.graphics.PixelFormat;
import android.media.AudioManager;
import android.media.MediaPlayer;
import android.os.Bundle;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.view.View;
import android.widget.Button;
import android.widget.SeekBar;

public class AndroidVideoPlayer extends Activity implements SurfaceHolder.Callback{

MediaPlayer mediaPlayer;
SurfaceView surfaceView;
SurfaceHolder surfaceHolder;
boolean pausing = false;

AudioManager audioManager;

String stringPath = "/sdcard/samplevideo.3gp";

 /** Called when the activity is first created. */
 @Override
 public void onCreate(Bundle savedInstanceState) {
     super.onCreate(savedInstanceState);
     setContentView(R.layout.main);


     audioManager = (AudioManager)getSystemService(Context.AUDIO_SERVICE);
     int maxVolume = audioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC);
     int curVolume = audioManager.getStreamVolume(AudioManager.STREAM_MUSIC);
     SeekBar volControl = (SeekBar)findViewById(R.id.volbar);
     volControl.setMax(maxVolume);
     volControl.setProgress(curVolume);
     volControl.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {

 @Override
 public void onStopTrackingTouch(SeekBar arg0) {
  // TODO Auto-generated method stub

 }

 @Override
 public void onStartTrackingTouch(SeekBar arg0) {
  // TODO Auto-generated method stub

 }

 @Override
 public void onProgressChanged(SeekBar arg0, int arg1, boolean arg2) {
  // TODO Auto-generated method stub
  audioManager.setStreamVolume(AudioManager.STREAM_MUSIC, arg1, 0);
 }
});


     Button buttonPlayVideo = (Button)findViewById(R.id.playvideoplayer);
     Button buttonPauseVideo = (Button)findViewById(R.id.pausevideoplayer);

     getWindow().setFormat(PixelFormat.UNKNOWN);
     surfaceView = (SurfaceView)findViewById(R.id.surfaceview);
     surfaceHolder = surfaceView.getHolder();
     surfaceHolder.addCallback(this);
     surfaceHolder.setFixedSize(176, 144);
     surfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
     mediaPlayer = new MediaPlayer();

     buttonPlayVideo.setOnClickListener(new Button.OnClickListener(){

 @Override
 public void onClick(View v) {
  // TODO Auto-generated method stub
  pausing = false;

  if(mediaPlayer.isPlaying()){
   mediaPlayer.reset();
  }

  mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
  mediaPlayer.setDisplay(surfaceHolder);

  try {
   mediaPlayer.setDataSource(stringPath);
   mediaPlayer.prepare();
  } catch (IllegalArgumentException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  } catch (IllegalStateException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  } catch (IOException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }

  mediaPlayer.start();


 }});

     buttonPauseVideo.setOnClickListener(new Button.OnClickListener(){

 @Override
 public void onClick(View v) {
  // TODO Auto-generated method stub
  if(pausing){
   pausing = false;
   mediaPlayer.start();
  }
  else{
   pausing = true;
   mediaPlayer.pause();
  }
 }});

 }



@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width,
 int height) {
// TODO Auto-generated method stub

}

@Override
public void surfaceCreated(SurfaceHolder holder) {
// TODO Auto-generated method stub

}

@Override
public void surfaceDestroyed(SurfaceHolder holder) {
// TODO Auto-generated method stub

}
}




The source code for this example ---> HERE

No comments:

Post a Comment