ZNDS智能电视网 推荐当贝市场

TV应用下载 / 资源分享区

软件下载 | 游戏 | 讨论 | 电视计算器

综合交流 / 评测 / 活动区

交流区 | 测硬件 | 网站活动 | Z币中心

新手入门 / 进阶 / 社区互助

新手 | 你问我答 | 免费刷机救砖 | ROM固件

查看: 18057|回复: 0
上一主题 下一主题
[案例]

IllegArugException: The surface has been released

[复制链接]
跳转到指定楼层
楼主
发表于 2013-8-28 16:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
1功能:进入一个activity,使用MediaPlayer和SurfaceView类来播放视频,启动activity时,直接初始化做MediaPlayer.start(),而不是通过一个监听器什么的来启动,就会出现:The surface has been released.   
错误位置:mediaplayer.setDisplay(surfaceView.getHost());   
原因:mediaPlayer对象没有做好准备。   
为什么?想想,如果你做一个监听,那么,视频就不是直接播放了,他有充分时间做准备了,就不会有错误了。   
解决方法:写一个通过一个ScheduledExecutorService和Handler类来解决。看代码,不多。[mw_shl_code=java,true]import android.view.SurfaceView;   
   
public class PlayActivity extends Activity {   
   
        private static String path,endName;   
           
        private SurfaceHolder mSurfaceHolder;   
        private SurfaceView mSurfaceView;   
        private MediaPlayer mMediaPlayer;   
           
        private ScheduledExecutorService executorService;   
           
        private Handler handler;   
           
        @Override   
        public void onCreate(Bundle savedInstanceState) {   
                super.onCreate(savedInstanceState);   
                setContentView(R.layout.play);   
                initialize();   
        }   
           
        private void initialize(){   
                executorService = Executors.newScheduledThreadPool(1);   
                mSurfaceView = (SurfaceView) findViewById(R.id.VideoView01);   
                mSurfaceHolder = mSurfaceView.getHolder();   
                mSurfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);   
                Intent i = getIntent();   
                path = i.getStringExtra("path");   
                endName = i.getStringExtra("endName");   
                Log.i("abc", path+","+endName);   
                handler = new Handler(new Handler.Callback() {   
                        @Override   
                        public boolean handleMessage(Message msg) {   
                                initMedia();   
                                return false;   
                        }   
                });   
                executorService.schedule(new Runnable() {   
                        @Override   
                        public void run() {   
                                handler.sendEmptyMessage(0);   
                        }   
                }, 10000, TimeUnit.MICROSECONDS);   
        }   
           
           
        private void initMedia(){   
                mMediaPlayer = new MediaPlayer();   
                mMediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);   
                mMediaPlayer.setDisplay(mSurfaceHolder);   
                try {   
                        mMediaPlayer.setDataSource(path);   
                        mMediaPlayer.prepare();   
                } catch (IllegalArgumentException e) {   
                        // TODO Auto-generated catch block   
                        e.printStackTrace();   
                } catch (IllegalStateException e) {   
                        // TODO Auto-generated catch block   
                        e.printStackTrace();   
                } catch (IOException e) {   
                        // TODO Auto-generated catch block   
                        e.printStackTrace();   
                }   
                mMediaPlayer.start();   
        }   
[/mw_shl_code]   
          该贴已经同步到 LinPeiChun的微博</font

上一篇:[底层开发教程] 从底层硬件到开发平台--一步步深入Android底
下一篇:在线更新——之实例版!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

站长推荐 上一条 /1 下一条

Archiver|新帖|标签|软件|Sitemap|ZNDS智能电视网 ( 苏ICP备2023012627号 )

网络信息服务信用承诺书 | 增值电信业务经营许可证:苏B2-20221768 丨 苏公网安备 32011402011373号

GMT+8, 2025-7-24 22:38 , Processed in 0.059863 second(s), 15 queries , Redis On.

Powered by Discuz!

监督举报:report#znds.com (请将#替换为@)

© 2007-2025 ZNDS.Com

快速回复 返回顶部 返回列表