package com.charon.video; import com.charon.video.fragment.OnlineFragment; import com.charon.video.view.LiveMediaController; import com.charon.video.view.MediaController; import com.charon.video.view.UniversalVideoView; import com.charon.video.view.UniversalVideoView.OnStateChangeListener; import android.app.Activity; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.graphics.drawable.AnimationDrawable; import android.media.MediaPlayer; import android.media.MediaPlayer.OnCompletionListener; import android.os.BatteryManager; import android.os.Bundle; import android.util.Log; import android.view.KeyEvent; import android.view.View; import android.widget.ImageView; /* * We can use setOnPreparedListener to set the loading view or use setOnStateChangeListener to get * the preparing or prepared state to control the loading view */ public class UniversalVideoViewActivity extends Activity { private static final String TAG = "UniversalVideoViewActivity"; private UniversalVideoView mUniversalVideoView; // private ProgressBar pb; private View mLoadingView; private ImageView mLoadingImage; private AnimationDrawable mLoadingAnimation; /* * TODO Set the path variable to a streaming video URL or a local media file * path. */ private String path; private boolean mLive; private String mBatteryLevel; private MediaController mMediaController; private BatteryReceiver mBatteryReceiver; private static final IntentFilter BATTERY_FILTER = new IntentFilter( Intent.ACTION_BATTERY_CHANGED); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_universalvideoview); findView(); initView(); } private void findView() { mUniversalVideoView = (UniversalVideoView) findViewById(R.id.uvv); mLoadingView = findViewById(R.id.loading); mLoadingImage = (ImageView) findViewById(R.id.iv_loading); mLoadingImage.setBackgroundResource(R.drawable.play_loading_anim); mLoadingAnimation = (AnimationDrawable) mLoadingImage.getBackground(); } private void initView() { showLoadingView(); Intent intent = getIntent(); if (intent != null) { path = intent.getStringExtra(OnlineFragment.URL); mLive = !intent.getBooleanExtra(OnlineFragment.LOCAL, true); } if (mLive) { mMediaController = new LiveMediaController(this); } else { mMediaController = new MediaController(this); } mUniversalVideoView.setMediaController(mMediaController); setBatteryLevel(); // Set the real height of this video view, so it will not use the window // height to calculate the ratio mUniversalVideoView.setVideoPath(path, mLive, mLive); // pb.setVisibility(View.VISIBLE); mUniversalVideoView.setOnCompletionListener(new OnCompletionListener() { @Override public void onCompletion(MediaPlayer mp) { // mUniversalVideoView.setVideoPath("mnt/sdcard/1.mp4"); // pb.setVisibility(View.VISIBLE); } }); mUniversalVideoView .setOnStateChangeListener(new OnStateChangeListener() { @Override public void stateChange(State state) { if (state == State.PREPARING) { showLoadingView(); } else if (state == State.PLAYING) { Log.e("UniversalVideoView", "live playing and hide the loading view"); hideLoadingView(); } else if (state == State.ERROR) { hideLoadingView(); } else if (state == State.VITAMIO_INITIALIZING) { showLoadingView(); } else if (state == State.PREPARED) { Log.e("UniversalVideoView", "live prepared...."); } else if (state == State.BUFFERING_START) { showLoadingView(); } else if (state == State.BUFFERING_END) { hideLoadingView(); } } }); mUniversalVideoView.setOnCompletionListener(new OnCompletionListener() { @Override public void onCompletion(MediaPlayer mp) { finish(); } }); mUniversalVideoView .setOnCompletionListener(new io.vov.vitamio.MediaPlayer.OnCompletionListener() { @Override public void onCompletion(io.vov.vitamio.MediaPlayer mp) { finish(); } }); } @Override protected void onPause() { super.onPause(); Log.d(TAG, "onPause"); unRegistReceiver(); if (mUniversalVideoView != null) { mUniversalVideoView.suspend(); } } @Override protected void onResume() { super.onResume(); Log.d(TAG, "onResume"); registReceiver(); if (mUniversalVideoView != null) { mUniversalVideoView.resume(); } } @Override protected void onDestroy() { super.onDestroy(); Log.d(TAG, "onDestroy"); if (mUniversalVideoView != null) mUniversalVideoView.stopPlayback(); } private void registReceiver() { if (mBatteryReceiver == null) { mBatteryReceiver = new BatteryReceiver(); } registerReceiver(mBatteryReceiver, BATTERY_FILTER); } private void unRegistReceiver() { if (mBatteryLevel != null) { unregisterReceiver(mBatteryReceiver); mBatteryReceiver = null; } } private void showLoadingView() { mLoadingAnimation.start(); mLoadingView.setVisibility(View.VISIBLE); } private void hideLoadingView() { Log.e("@@@", "hide loading view..."); if (mLoadingAnimation != null && mLoadingAnimation.isRunning()) { mLoadingAnimation.stop(); } mLoadingView.setVisibility(View.GONE); } private void setBatteryLevel() { if (mMediaController != null) mMediaController.setBatteryLevel(mBatteryLevel); } private class BatteryReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { int level = intent.getIntExtra(BatteryManager.EXTRA_LEVEL, 0); int scale = intent.getIntExtra(BatteryManager.EXTRA_SCALE, 100); int percent = scale > 0 ? level * 100 / scale : 0; if (percent > 100) percent = 100; mBatteryLevel = String.valueOf(percent) + "%"; setBatteryLevel(); } } }