美文网首页Android笔记
Android MediaPlayer简单的实用以及续播的实现

Android MediaPlayer简单的实用以及续播的实现

作者: Cedric_h | 来源:发表于2019-07-26 00:20 被阅读0次

    原文:https://blog.csdn.net/uyy203/article/details/72460564

    MianActivity.java

    package xyz.video;
    
    import android.app.Activity;
    import android.content.res.AssetFileDescriptor;
    import android.content.res.AssetManager;
    import android.media.MediaPlayer;
    import android.os.Bundle;
    import android.util.Log;
    import android.view.SurfaceHolder;
    import android.view.SurfaceView;
    import android.view.View;
    import android.view.Window;
    
    public class MainActivity extends Activity {
    
        private MediaPlayer mp = new MediaPlayer();
        private SurfaceView surfaceView;
        private SurfaceHolder surfaceHolder;
        private int currentIndex = 0; //播放进度
        private boolean isSurfaceCreated=false;//surface是否已创建
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            requestWindowFeature(Window.FEATURE_NO_TITLE);
            setContentView(R.layout.activity_main);
    
    
            surfaceView = (SurfaceView) findViewById(R.id.surfaceView);
    
    
            mp = new MediaPlayer();
            createSurface();
    
    
            mp.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
                @Override
                public void onPrepared(MediaPlayer mp) {
                    mp.seekTo(currentIndex);
                    mp.start();
                }
            });
    
    
            //播放完成时
            mp.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
                @Override
                public void onCompletion(MediaPlayer mp) {
                    releasePlayer();
    //                surfaceView.setVisibility(View.GONE);
                }
            });
    
        }
    
    
        private SurfaceHolder.Callback mCallback = new SurfaceHolder.Callback() {
            @Override
            public void surfaceCreated(SurfaceHolder surfaceHolder) {
                // 当Surface被创建时触发
                if (surfaceHolder == null) return;
    
                isSurfaceCreated=true;
    
                play();
    
                Log.e("surface", "created");
    
    
    
            }
    
            @Override
            public void surfaceChanged(SurfaceHolder surfaceHolder, int i, int i1, int i2) {
                // 当Surface尺寸等参数改变时触发
                Log.e("surface", "changed");
            }
    
            @Override
            public void surfaceDestroyed(SurfaceHolder Holder) {
                // 当Surface被销毁时触发
                Log.e("surface", "Destroyed");
                isSurfaceCreated=false;
                surfaceHolder=null;
            }
        };
    
    
        //创建surface
        private void createSurface(){
            if(mp==null) return;
            surfaceHolder = surfaceView.getHolder();
            surfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); //兼容4.0以下的版本
            surfaceHolder.addCallback(mCallback);
        }
    
    
        //释放mediaplayer
        private void releasePlayer(){
            if(mp!=null){
                mp.stop();
                mp.release();
                mp=null;
                surfaceView.setVisibility(View.GONE);
            }
        }
    
    
        //播放
        private void play(){
    
            if(mp==null) return;
    
            try {
                /**raw目录**/
                mp.reset();
    //                //在这里我们指定MediaPlayer在当前的Surface中进行播放
    //                Uri uri=Uri.parse("android.resource://"+getPackageName()+"/"+R.raw.welcome_video_720_1280);
    //                mp.setDisplay(surfaceHolder);
    //                mp.setDataSource(getBaseContext(),uri);
    //                //在指定了MediaPlayer播放的容器后,我们就可以使用prepare或者prepareAsync来准备播放了
    //                mp.prepareAsync();
    
    
                /**assets目录**/
                mp.reset();
                AssetManager assetManager = getAssets();
                // 取得音频文件
                AssetFileDescriptor descriptor = assetManager.openFd("welcome_video_720_1280.mp4");
                // 加载音频,但还未完全准备
                mp.setDisplay(surfaceHolder);
                mp.setDataSource(descriptor.getFileDescriptor(), descriptor.getStartOffset(), descriptor.getLength());
                mp.prepareAsync();
    
            }catch (Exception e){
                e.printStackTrace();
            }
    
        }
    
    
        @Override
        protected void onPause() {
            super.onPause();
            try {
                //假如正在播放,程序因进入后台等原因进入onPause,记录当前播放进度
                if (mp != null && mp.isPlaying()) {
                    currentIndex = mp.getCurrentPosition();
                    mp.pause();
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
    
        }
    
        @Override
        protected void onDestroy() {
            super.onDestroy();
            Log.e("activity", "destroy");
            releasePlayer();//释放MediaPlayer
        }
    
    
        @Override
        protected void onRestart() {
            super.onRestart();
            //重新进入app,假如surface还没被创建,再次创建
            if(!isSurfaceCreated) {
                createSurface();
            }
        }
    
        @Override
        protected void onResume() {
            super.onResume();
            //重新进入App后,在暂停的位置开始播放
            if(isSurfaceCreated) {
                play();
            }
        }
    }
    

    activity_main.xml

    <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:id="@+id/activity_main"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:context="xyz.video.MainActivity">
    
    
        <SurfaceView
            android:id="@+id/surfaceView"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            />
    
    </RelativeLayout>
    

    相关文章

      网友评论

        本文标题:Android MediaPlayer简单的实用以及续播的实现

        本文链接:https://www.haomeiwen.com/subject/owzqrctx.html