android的mediaplayer播放视频,mediaplayer not present如何解决?求大神

u010653906 2015-12-21 10:43:23
代码如下:
package com.example.videoplay;

import java.io.File;
import java.io.IOException;

import android.app.Activity;
import android.media.AudioManager;
import android.media.MediaPlayer;
import android.media.MediaPlayer.OnBufferingUpdateListener;
import android.media.MediaPlayer.OnCompletionListener;
import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;
import android.util.Log;
import android.view.SurfaceHolder;
import android.view.SurfaceView;

public class MainActivity extends Activity implements OnBufferingUpdateListener,OnCompletionListener, MediaPlayer.OnPreparedListener,SurfaceHolder.Callback {

private MediaPlayer mediaPlayer;
private SurfaceView surfaceView;
private SurfaceHolder surfaceHolder;
private int videoWidth;
private int videoHeight;
private String url;

@SuppressWarnings("deprecation")
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
url = Environment.getExternalStorageDirectory() + "/SmartPhoneVideo/VideoAndGPS/20151218140523/1.mp4";
this.surfaceView = (SurfaceView) this.findViewById(R.id.surface);
this.surfaceHolder = this.surfaceView.getHolder();
this.surfaceHolder.addCallback(this);
this.surfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
}

private void playVideo() throws IllegalArgumentException,IllegalStateException, IOException {
this.mediaPlayer = MediaPlayer.create(this, Uri.fromFile(new File(url)), surfaceHolder);
// this.mediaPlayer.setDataSource(url);
// this.mediaPlayer.setDisplay(this.surfaceHolder);
this.mediaPlayer.prepare();
this.mediaPlayer.setOnBufferingUpdateListener(this);
this.mediaPlayer.setOnPreparedListener(this);
this.mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
Log.i("mplayer", ">>>play video");
}

@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width,
int height) {
// TODO Auto-generated method stub
}

@Override
public void surfaceCreated(SurfaceHolder holder) {
try {
this.playVideo();
} catch (Exception e) {
Log.i("cat", ">>>error", e);
}
}

@Override
public void surfaceDestroyed(SurfaceHolder holder) {
// TODO Auto-generated method stub

}

@Override
public void onPrepared(MediaPlayer mp) {
this.videoWidth = this.mediaPlayer.getVideoWidth();
this.videoHeight = this.mediaPlayer.getVideoHeight();

if (this.videoHeight != 0 && this.videoWidth != 0) {
this.surfaceHolder.setFixedSize(this.videoWidth, this.videoHeight);
this.mediaPlayer.start();
}
}

@Override
public void onCompletion(MediaPlayer mp) {
// TODO Auto-generated method stub

}

@Override
public void onBufferingUpdate(MediaPlayer mp, int percent) {
// TODO Auto-generated method stub

}

@Override
protected void onDestroy() {
super.onDestroy();
if (this.mediaPlayer != null) {
this.mediaPlayer.release();
this.mediaPlayer = null;
}
}

}

之前用的new MediaPlayer();出现not persent的问题,在网上查了下,说是android4.0之后必须用creat()方法,但是我更换了creat()方法之后,仍是报这个错误,求大神帮帮我。
...全文
1180 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
至余 2016-12-26
  • 打赏
  • 举报
回复
我也遇到这个问题 解决不了
Iori_AshCrimson 2016-11-24
  • 打赏
  • 举报
回复
sd卡的权限加了吗?
djzhi3112 2016-02-22
  • 打赏
  • 举报
回复
解决了吗?我最近也遇到了这个问题
「已注销」 2015-12-27
  • 打赏
  • 举报
回复
一句注释都没有,你这不是在折麽人吗?
Birds2018 2015-12-21
  • 打赏
  • 举报
回复
this.mediaPlayer.prepare(); 这个改成异步的

80,471

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧