Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/181.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java OnCompletionListener不工作_Java_Android_Eclipse_Android Activity_Video Streaming - Fatal编程技术网

Java OnCompletionListener不工作

Java OnCompletionListener不工作,java,android,eclipse,android-activity,video-streaming,Java,Android,Eclipse,Android Activity,Video Streaming,我正在尝试让视频在我的Android应用程序上背靠背播放,并且只有在每个视频都被完整观看之后 我想出了以下代码: package com.davekelley; import android.support.v7.app.ActionBarActivity; import android.app.Activity; import android.os.Bundle; import android.view.Menu; import android.view.MenuItem; import an

我正在尝试让视频在我的Android应用程序上背靠背播放,并且只有在每个视频都被完整观看之后

我想出了以下代码:

package com.davekelley;
import android.support.v7.app.ActionBarActivity;
import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.media.MediaPlayer;
import android.net.Uri;
import android.widget.MediaController;
import android.widget.VideoView;

public class Watch extends Activity {

MediaPlayer player;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_watch);

    player = new MediaPlayer();

    player.setOnCompletionListener(new OnCompletionListener() {
        public void onCompletion(MediaPlayer mp) {
            // TODO Auto-generated method stub
            mp.stop();
            mp.release();
            int i = 0;
            if (i  < 2) {
                i++;
                String path="http://domain.com/videos/"+i+".mp4";
                playVideo(path);
            }
            else i=0;
        }
    });
    player.start();
}

private void playVideo(String filename) {
      try {
          player.setDataSource(filename); 
          player.prepare();
          player.start();
            } catch (Exception e) { 
      // TODO Auto-generated catch block
      e.printStackTrace(); 
      } 
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.watch, menu);
    return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    // Handle action bar item clicks here. The action bar will
    // automatically handle clicks on the Home/Up button, so long
    // as you specify a parent activity in AndroidManifest.xml.
    int id = item.getItemId();
    if (id == R.id.action_settings) {
        return true;
    }
    return super.onOptionsItemSelected(item);
}


}
package com.davekelley;
导入android.support.v7.app.ActionBarActivity;
导入android.app.Activity;
导入android.os.Bundle;
导入android.view.Menu;
导入android.view.MenuItem;
导入android.media.MediaPlayer;
导入android.net.Uri;
导入android.widget.MediaController;
导入android.widget.VideoView;
公共课堂观察扩大活动范围{
媒体播放器;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity\u-watch);
player=新媒体播放器();
player.setOnCompletionListener(新的OnCompletionListener(){
完成时的公共作废(MediaPlayer mp){
//TODO自动生成的方法存根
mp.stop();
mp.release();
int i=0;
如果(i<2){
i++;
字符串路径=”http://domain.com/videos/“+i+”.mp4”;
播放视频(路径);
}
否则i=0;
}
});
player.start();
}
私有void播放视频(字符串文件名){
试一试{
player.setDataSource(文件名);
player.prepare();
player.start();
}捕获(例外e){
//TODO自动生成的捕捉块
e、 printStackTrace();
} 
}
@凌驾
公共布尔onCreateOptions菜单(菜单){
//为菜单充气;这会将项目添加到操作栏(如果存在)。
getMenuInflater().充气(R.menu.watch,menu);
返回true;
}
@凌驾
公共布尔值onOptionsItemSelected(菜单项项){
//处理操作栏项目单击此处。操作栏将
//自动处理Home/Up按钮上的点击,只要
//在AndroidManifest.xml中指定父活动时。
int id=item.getItemId();
if(id==R.id.action\u设置){
返回true;
}
返回super.onOptionsItemSelected(项目);
}
}
但我甚至无法运行它,因为Eclipse告诉我“MediaPlayer类型中的方法setOnCompletionListener(MediaPlayer.OnCompletionListener)不适用于参数(new OnCompletionListener(){})”

这是什么原因造成的?我剩下的代码呢……它能实现我想要的吗?谢谢。

复制这行

   String path="http://domain.com/videos/"+i+".mp4";
   playVideo(path);
之后

   player = new MediaPlayer();

尝试播放第一个视频并为媒体播放器设置OnCompletionListener,它在第一个视频完成时会给您回电话,然后尝试使用新的播放器实例检查第二个视频在您的情况下,您从未为第一个视频设置数据源只是初始化播放器实例并设置OnCompletionListener,它从未调用becz未设置第一个视频数据来源

    private MediaPlayer player;
    private int i = 1;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        playVideo("http://domain.com/videos/"+i+".mp4\"");
    }

    public void playVideo(String path){

        try{
            player = new MediaPlayer();
            player.setAudioStreamType(AudioManager.STREAM_MUSIC);
            player.setDataSource(path);
            player.prepareAsync();
            player.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
                @Override
                public void onPrepared(MediaPlayer mp) {
                    mp.start();
                }
            });
            player.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
                @Override
                public void onCompletion(MediaPlayer mp) {
                    player.release();
                    player = null;
                    if(i<2){
                        playVideo("http://domain.com/videos/"+(++i)+".mp4");
                    }
                }
            });
        }catch (Exception e){
            e.printStackTrace();
        }
    }
专用MediaPlayer播放器;
私有int i=1;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
播放视频(“http://domain.com/videos/“+i+”.mp4\”);
}
公共void播放视频(字符串路径){
试一试{
player=新媒体播放器();
player.setAudioStreamType(AudioManager.STREAM_MUSIC);
player.setDataSource(路径);
player.prepareAsync();
player.setOnPreparedListener(新的MediaPlayer.OnPreparedListener(){
@凌驾
已准备好公开作废(MediaPlayer mp){
mp.start();
}
});
player.setOnCompletionListener(新的MediaPlayer.OnCompletionListener(){
@凌驾
完成时的公共作废(MediaPlayer mp){
player.release();
player=null;

如果(i)你可以对这段代码的实际功能做一些解释吗?谢谢。@AndréDaniel这段代码是用来一个接一个地播放视频的。当第一段完整完成时,第二段播放,依此类推……@Ravi仍然不起作用。说“方法setOnCompletionListener(MediaPlayer.OnCompletionListener)在类型中,MediaPlayer不适用于参数(new OnCompletionListener(){})”?感谢您的帮助,但它似乎对我不起作用。我非常确定视频的URL工作正常,所以代码中一定有什么内容?