Media Android

/*
 * Copyright (C) 2009 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package com.example.android.apis.media;
import android.app.Activity;
import android.content.Intent;
import android.media.AudioManager;
import android.media.MediaPlayer;
import android.media.MediaPlayer.OnBufferingUpdateListener;
import android.media.MediaPlayer.OnCompletionListener;
import android.media.MediaPlayer.OnPreparedListener;
import android.media.MediaPlayer.OnVideoSizeChangedListener;
import android.os.Bundle;
import android.util.Log;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;
class MediaPlayerDemo_Audio extends Activity {
  private static final String TAG = "MediaPlayerDemo";
  private MediaPlayer mMediaPlayer;
  private static final String MEDIA = "media";
  private static final int LOCAL_AUDIO = 1;
  private static final int STREAM_AUDIO = 2;
  private static final int RESOURCES_AUDIO = 3;
  private static final int LOCAL_VIDEO = 4;
  private static final int STREAM_VIDEO = 5;
  private String path;
  private TextView tx;
  @Override
  public void onCreate(Bundle icicle) {
    super.onCreate(icicle);
    tx = new TextView(this);
    setContentView(tx);
    Bundle extras = getIntent().getExtras();
    playAudio(extras.getInt(MEDIA));
  }
  private void playAudio(Integer media) {
    try {
      switch (media) {
      case LOCAL_AUDIO:
        /**
         * TODO: Set the path variable to a local audio file path.
         */
        path = "";
        if (path == "") {
          // Tell the user to provide an audio file URL.
          Toast.makeText(
              MediaPlayerDemo_Audio.this,
              "Please edit MediaPlayer_Audio Activity, "
                  + "and set the path variable to your audio file path."
                  + " Your audio file must be stored on sdcard.",
              Toast.LENGTH_LONG).show();
        }
        mMediaPlayer = new MediaPlayer();
        mMediaPlayer.setDataSource(path);
        mMediaPlayer.prepare();
        mMediaPlayer.start();
        break;
      case RESOURCES_AUDIO:
        /**
         * TODO: Upload a audio file to res/raw folder and provide its
         * resid in MediaPlayer.create() method.
         */
        mMediaPlayer = MediaPlayer.create(this, R.raw.test_cbr);//test_cbr.mp3
        mMediaPlayer.start();
      }
      tx.setText("Playing audio...");
    } catch (Exception e) {
      Log.e(TAG, "error: " + e.getMessage(), e);
    }
  }
  @Override
  protected void onDestroy() {
    super.onDestroy();
    // TODO Auto-generated method stub
    if (mMediaPlayer != null) {
      mMediaPlayer.release();
      mMediaPlayer = null;
    }
  }
}
class MediaPlayerDemo_Video extends Activity implements
    OnBufferingUpdateListener, OnCompletionListener, OnPreparedListener,
    OnVideoSizeChangedListener, SurfaceHolder.Callback {
  private static final String TAG = "MediaPlayerDemo";
  private int mVideoWidth;
  private int mVideoHeight;
  private MediaPlayer mMediaPlayer;
  private SurfaceView mPreview;
  private SurfaceHolder holder;
  private String path;
  private Bundle extras;
  private static final String MEDIA = "media";
  private static final int LOCAL_AUDIO = 1;
  private static final int STREAM_AUDIO = 2;
  private static final int RESOURCES_AUDIO = 3;
  private static final int LOCAL_VIDEO = 4;
  private static final int STREAM_VIDEO = 5;
  private boolean mIsVideoSizeKnown = false;
  private boolean mIsVideoReadyToBePlayed = false;
  /**
   * 
   * Called when the activity is first created.
   */
  @Override
  public void onCreate(Bundle icicle) {
    super.onCreate(icicle);
    setContentView(R.layout.row);
    mPreview = (SurfaceView) findViewById(R.id.surface);
    holder = mPreview.getHolder();
    holder.addCallback(this);
    holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
    extras = getIntent().getExtras();
  }
  private void playVideo(Integer Media) {
    doCleanUp();
    try {
      switch (Media) {
      case LOCAL_VIDEO:
        /*
         * TODO: Set the path variable to a local media file path.
         */
        path = "";
        if (path == "") {
          // Tell the user to provide a media file URL.
          Toast.makeText(
              MediaPlayerDemo_Video.this,
              "Please edit MediaPlayerDemo_Video Activity, "
                  + "and set the path variable to your media file path."
                  + " Your media file must be stored on sdcard.",
              Toast.LENGTH_LONG).show();
        }
        break;
      case STREAM_VIDEO:
        /*
         * TODO: Set path variable to progressive streamable mp4 or 3gpp
         * format URL. Http protocol should be used. Mediaplayer can
         * only play "progressive streamable contents" which basically
         * means: 1. the movie atom has to precede all the media data
         * atoms. 2. The clip has to be reasonably interleaved.
         */
        path = "";
        if (path == "") {
          // Tell the user to provide a media file URL.
          Toast.makeText(
              MediaPlayerDemo_Video.this,
              "Please edit MediaPlayerDemo_Video Activity,"
                  + " and set the path variable to your media file URL.",
              Toast.LENGTH_LONG).show();
        }
        break;
      }
      // Create a new media player and set the listeners
      mMediaPlayer = new MediaPlayer();
      mMediaPlayer.setDataSource(path);
      mMediaPlayer.setDisplay(holder);
      mMediaPlayer.prepare();
      mMediaPlayer.setOnBufferingUpdateListener(this);
      mMediaPlayer.setOnCompletionListener(this);
      mMediaPlayer.setOnPreparedListener(this);
      mMediaPlayer.setOnVideoSizeChangedListener(this);
      mMediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
    } catch (Exception e) {
      Log.e(TAG, "error: " + e.getMessage(), e);
    }
  }
  public void onBufferingUpdate(MediaPlayer arg0, int percent) {
    Log.d(TAG, "onBufferingUpdate percent:" + percent);
  }
  public void onCompletion(MediaPlayer arg0) {
    Log.d(TAG, "onCompletion called");
  }
  public void onVideoSizeChanged(MediaPlayer mp, int width, int height) {
    Log.v(TAG, "onVideoSizeChanged called");
    if (width == 0 || height == 0) {
      Log.e(TAG, "invalid video width(" + width + ") or height(" + height
          + ")");
      return;
    }
    mIsVideoSizeKnown = true;
    mVideoWidth = width;
    mVideoHeight = height;
    if (mIsVideoReadyToBePlayed && mIsVideoSizeKnown) {
      startVideoPlayback();
    }
  }
  public void onPrepared(MediaPlayer mediaplayer) {
    Log.d(TAG, "onPrepared called");
    mIsVideoReadyToBePlayed = true;
    if (mIsVideoReadyToBePlayed && mIsVideoSizeKnown) {
      startVideoPlayback();
    }
  }
  public void surfaceChanged(SurfaceHolder surfaceholder, int i, int j, int k) {
    Log.d(TAG, "surfaceChanged called");
  }
  public void surfaceDestroyed(SurfaceHolder surfaceholder) {
    Log.d(TAG, "surfaceDestroyed called");
  }
  public void surfaceCreated(SurfaceHolder holder) {
    Log.d(TAG, "surfaceCreated called");
    playVideo(extras.getInt(MEDIA));
  }
  @Override
  protected void onPause() {
    super.onPause();
    releaseMediaPlayer();
    doCleanUp();
  }
  @Override
  protected void onDestroy() {
    super.onDestroy();
    releaseMediaPlayer();
    doCleanUp();
  }
  private void releaseMediaPlayer() {
    if (mMediaPlayer != null) {
      mMediaPlayer.release();
      mMediaPlayer = null;
    }
  }
  private void doCleanUp() {
    mVideoWidth = 0;
    mVideoHeight = 0;
    mIsVideoReadyToBePlayed = false;
    mIsVideoSizeKnown = false;
  }
  private void startVideoPlayback() {
    Log.v(TAG, "startVideoPlayback");
    holder.setFixedSize(mVideoWidth, mVideoHeight);
    mMediaPlayer.start();
  }
}
public class Test extends Activity {
  private Button mlocalvideo;
  private Button mresourcesvideo;
  private Button mstreamvideo;
  private Button mlocalaudio;
  private Button mresourcesaudio;
  private Button mstreamaudio;
  private static final String MEDIA = "media";
  private static final int LOCAL_AUDIO = 1;
  private static final int STREAM_AUDIO = 2;
  private static final int RESOURCES_AUDIO = 3;
  private static final int LOCAL_VIDEO = 4;
  private static final int STREAM_VIDEO = 5;
  private static final int RESOURCES_VIDEO = 6;
  @Override
  protected void onCreate(Bundle icicle) {
    // TODO Auto-generated method stub
    super.onCreate(icicle);
    setContentView(R.layout.main);
    mlocalaudio = (Button) findViewById(R.id.localaudio);
    mlocalaudio.setOnClickListener(mLocalAudioListener);
    mresourcesaudio = (Button) findViewById(R.id.resourcesaudio);
    mresourcesaudio.setOnClickListener(mResourcesAudioListener);
    mlocalvideo = (Button) findViewById(R.id.localvideo);
    mlocalvideo.setOnClickListener(mLocalVideoListener);
    mstreamvideo = (Button) findViewById(R.id.streamvideo);
    mstreamvideo.setOnClickListener(mStreamVideoListener);
  }
  private OnClickListener mLocalAudioListener = new OnClickListener() {
    public void onClick(View v) {
      Intent intent = new Intent(Test.this.getApplication(),
          MediaPlayerDemo_Audio.class);
      intent.putExtra(MEDIA, LOCAL_AUDIO);
      startActivity(intent);
    }
  };
  private OnClickListener mResourcesAudioListener = new OnClickListener() {
    public void onClick(View v) {
      Intent intent = new Intent(Test.this.getApplication(),
          MediaPlayerDemo_Audio.class);
      intent.putExtra(MEDIA, RESOURCES_AUDIO);
      startActivity(intent);
    }
  };
  private OnClickListener mLocalVideoListener = new OnClickListener() {
    public void onClick(View v) {
      Intent intent = new Intent(Test.this,
          MediaPlayerDemo_Video.class);
      intent.putExtra(MEDIA, LOCAL_VIDEO);
      startActivity(intent);
    }
  };
  private OnClickListener mStreamVideoListener = new OnClickListener() {
    public void onClick(View v) {
      Intent intent = new Intent(Test.this,
          MediaPlayerDemo_Video.class);
      intent.putExtra(MEDIA, STREAM_VIDEO);
      startActivity(intent);
    }
  };
}
//main.xml

    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    >
            android:layout_height="wrap_content"
        android:layout_width="match_parent" 
        android:text="local_video" 
    />
    
            android:layout_height="wrap_content"
        android:layout_width="match_parent" 
        android:text="stream_video" 
    />
    
            android:layout_height="wrap_content"
        android:layout_width="match_parent" 
        android:text="local_audio" 
    />
    
            android:layout_height="wrap_content"
        android:layout_width="match_parent" 
        android:text="res_audio" 
    />
    

//row.xml

    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
            android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center">