【问题标题】:Calling New activity after video completes视频完成后调用新活动
【发布时间】:2011-08-08 14:48:49
【问题描述】:

我正在尝试实现一个 onCompletionListener 以便在启动视频完成时调用选项卡 Activity(包含所有内容)。问题是,视频播放后,没有调用下一个活动。代码如下:

package com.companyname.cpny;


import android.app.Activity;
import android.content.Intent;
import android.media.MediaPlayer;
import android.net.Uri;
import android.os.Bundle;
import android.widget.VideoView;

public class splash extends Activity 

     {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
VideoView vs = (VideoView) findViewById(R.id.imlsplash);
Uri uri = Uri.parse("android.resource://"+getPackageName() + "/"+R.raw.iphonesplashfinal);
vs.setVideoURI(uri);
vs.start();     
vs.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {

    public void onCompletion(MediaPlayer mp) {
        // TODO Auto-generated method stub
            Intent main = new Intent(splash.this, tabhost.class);
                splash.this.startActivity(main);
                splash.this.finish();
    }

});
}
}

【问题讨论】:

  • 你验证过 onCompletion 被调用了吗?您可能需要在调用 start() 之前设置 onCompletionListener。
  • 如何验证?在 Public void 部分之前,错误日志中的所有内容看起来都被正确调用。我知道 vs.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { 行上方的所有内容都可以正常工作,因为我已经在其上方实现了 onCompletionListener 并且视频无法播放。
  • 在你的 onCompletionListener 中设置断点...

标签: java android android-activity android-intent android-videoview


【解决方案1】:

你可以试试这个

 vs.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {

    public void onCompletion(MediaPlayer mp) {

             splash.this.runOnUiThread(new Runnable() {

                    @Override
                    public void run() {
                        // TODO Auto-generated method stub
                        Intent main = new Intent(splash.this, tabhost.class);
                        splash.this.startActivity(main);
                        splash.this.finish();
                    }
                });
    } 

编辑: 你也可以先注册监听器,然后再调用start。

 vs.start() 

【讨论】:

  • Activity 不需要在 UI 线程上启动 - 所以这可能无法解决它。
  • @Berdon:你可能是对的,但是作为一个经验法则,我不会做任何与听众的主要活动有关的事情。
  • 是的,那没用。这可能是一个问题吗?飞溅活动是我的 tabhost 活动之外的一个完全不同的类(显然)。例如,tabhost 活动不会启动启动活动;实际上反之亦然。我是否需要将启动活动覆盖到我的选项卡活动上,以便我可以完成();飞溅和tabhost就在那里?这有意义吗?
  • 不,这不是必需的,关键问题是您是否调用了 onCompletion() 方法?你可以在那里设置一个断点来检查它是否确实被调用了。
  • @Derok8 你是怎么解决这个问题的?你忽略了什么?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-26
  • 1970-01-01
  • 1970-01-01
  • 2014-03-13
  • 1970-01-01
相关资源
最近更新 更多