/* * 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