android – Surafce已发布错误

我在为在线视频创建一个媒体播放器,但是当我尝试运行它时,显示了表面已经发布的错误.这是我的编码:
public class VideoSample1 extends Activity implements  Callback,OnPreparedListener,OnCompletionListener,OnClickListener,OnSeekCompleteListener,android.view.SurfaceHolder.Callback
    {
        public String video_path = "My video URL";
        private SurfaceView surfaceViewFrame;
        private MediaPlayer player;
        private SurfaceHolder holder;
        private Bundle extras;
        private static final String TAG = "log_tag";
        private boolean b =false;

        @Override
        protected void onCreate(Bundle savedInstanceState)
        {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.customvideoview);
            extras = getIntent().getExtras();

            surfaceViewFrame = (SurfaceView) findViewById(R.id.surfaceViewFrame);
            surfaceViewFrame.setonClickListener(this);
            surfaceViewFrame.setClickable(false);

            holder = surfaceViewFrame.getHolder();
            holder.addCallback(this);
            holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);

            player = new MediaPlayer();
            player.setonPreparedListener(this);
            player.setonCompletionListener(this);

            player.setonSeekCompleteListener(this);
            player.setScreenOnWhilePlaying(true);
            player.setdisplay(holder);
        }
        @Override
        protected void onDestroy()
        {
            super.onDestroy();
            player.stop();
            player.release();
            player = null;
            Toast.makeText(VideoSample1.this,"back",Toast.LENGTH_SHORT).show();
            finish();
        }
        private void playVideo()
        {

            new Thread(new Runnable() 
            {
                public void run() 
                {
                    try
                    {

                        player.setDataSource(VideoSample1.this,Uri.parse(extras.getString("Video URL")));
                        player.prepareAsync();
                    }
                    catch (IllegalArgumentException e) 
                    {
                        Log.d("admin","Error while playing video");
                        e.printstacktrace();
                        Log.i(TAG,"tag"+ e.getMessage());
                    } 
                    catch (IllegalStateException e) 
                    {
                        Log.d("admin","Error1 while playing video");
                        e.printstacktrace();
                        Log.i(TAG,"tag"+e.getMessage());
                    } 
                    catch (IOException e) 
                    {
                        e.printstacktrace();
                        Log.d("admin","Error while playing video.Please,check your network connection");
                        Log.i(TAG,"tag"+e.getLocalizedMessage());
                    }
                }
            }).start();
        }


        public void surfaceChanged(SurfaceHolder holder,int format,int width,int height)
        {

        }

        public void surfaceCreated(SurfaceHolder holder) 
        {
            playVideo();
        }

        public void surfaceDestroyed(SurfaceHolder holder) 
        {

        }

        public void onPrepared(MediaPlayer mp)
        {
            if (!player.isPlaying())
            {
                b = true;
                player.start();
            }

        }

        public void onCompletion(MediaPlayer mp)
        {
            mp.stop();

            finish();
        }


        public void onSeekComplete(MediaPlayer mp)
        {

        }
        @Override
        public void invalidateDrawable(Drawable who) 
        {

        }

        @Override
        public void scheduleDrawable(Drawable who,Runnable what,long when)
        {
    // Todo Auto-generated method stub

        }

        @Override
        public void unscheduleDrawable(Drawable who,Runnable what) 
        {
    // Todo Auto-generated method stub

        }


        @Override
        public void onClick(View v)
        {
    // Todo Auto-generated method stub

        }

}

我引用了this和其他堆栈溢出站点,但没有与我一起工作:-(.错误在setdisplay(持有者)附近.
这里是我的Logcat消息:

08-31 10:18:01.512: E/AndroidRuntime(1162): FATAL EXCEPTION: main
08-31 10:18:01.512: E/AndroidRuntime(1162): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.msense.msenseplayer/com.msense.msenseplayer.VideoSample1}: java.lang.IllegalArgumentException: The surface has been released
08-31 10:18:01.512: E/AndroidRuntime(1162):     at android.app.ActivityThread.performlaunchActivity(ActivityThread.java:1956)
08-31 10:18:01.512: E/AndroidRuntime(1162):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1981)
08-31 10:18:01.512: E/AndroidRuntime(1162):     at android.app.ActivityThread.access$600(ActivityThread.java:123)
08-31 10:18:01.512: E/AndroidRuntime(1162):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1147)
08-31 10:18:01.512: E/AndroidRuntime(1162):     at android.os.Handler.dispatchMessage(Handler.java:99)
08-31 10:18:01.512: E/AndroidRuntime(1162):     at android.os.Looper.loop(Looper.java:137)
08-31 10:18:01.512: E/AndroidRuntime(1162):     at android.app.ActivityThread.main(ActivityThread.java:4429)
08-31 10:18:01.512: E/AndroidRuntime(1162):     at java.lang.reflect.Method.invokeNative(Native Method)
08-31 10:18:01.512: E/AndroidRuntime(1162):     at java.lang.reflect.Method.invoke(Method.java:511)
08-31 10:18:01.512: E/AndroidRuntime(1162):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:795)
08-31 10:18:01.512: E/AndroidRuntime(1162):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:562)
08-31 10:18:01.512: E/AndroidRuntime(1162):     at dalvik.system.NativeStart.main(Native Method)
08-31 10:18:01.512: E/AndroidRuntime(1162): Caused by: java.lang.IllegalArgumentException: The surface has been released
08-31 10:18:01.512: E/AndroidRuntime(1162):     at android.media.MediaPlayer._setVideoSurface(Native Method)
08-31 10:18:01.512: E/AndroidRuntime(1162):     at android.media.MediaPlayer.setdisplay(MediaPlayer.java:641)
08-31 10:18:01.512: E/AndroidRuntime(1162):     at com.msense.msenseplayer.VideoSample1.onCreate(VideoSample1.java:53)
08-31 10:18:01.512: E/AndroidRuntime(1162):     at android.app.Activity.performCreate(Activity.java:4578)
08-31 10:18:01.512: E/AndroidRuntime(1162):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1049)
08-31 10:18:01.512: E/AndroidRuntime(1162):     at android.app.ActivityThread.performlaunchActivity(ActivityThread.java:1920)
08-31 10:18:01.512: E/AndroidRuntime(1162):     ... 11 more

解决方法

你好,我解决了我的错误.简单来说,我在表面处理方法添加了player.setdisplay
public void surfaceCreated(SurfaceHolder holder) 
{ 
playVideo(); 
player.setdisplay(holder); 
}

解决了我的问题.

相关文章

Android性能优化——之控件的优化 前面讲了图像的优化,接下...
前言 上一篇已经讲了如何实现textView中粗字体效果,里面主要...
最近项目重构,涉及到了数据库和文件下载,发现GreenDao这个...
WebView加载页面的两种方式 一、加载网络页面 加载网络页面,...
给APP全局设置字体主要分为两个方面来介绍 一、给原生界面设...
前言 最近UI大牛出了一版新的效果图,按照IOS的效果做的,页...