Java OnCompletionListener不工作
我正在尝试让视频在我的Android应用程序上背靠背播放,并且只有在每个视频都被完整观看之后 我想出了以下代码: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
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工作正常,所以代码中一定有什么内容?