Android Studio的MediaPlayer播放本地视频

  • 关于MediaPlayer错误[open failed: EACCES (Permission denied)]
    • 可能会有下面几个方面的错
    • 1.权限没有添加
    • 2. targetSdkVersion过高
  • 下面附上一些代码

关于MediaPlayer错误[open failed: EACCES (Permission denied)]

可能会有下面几个方面的错

1.权限没有添加

1)在AndroidMainifest.xml文件中添加用户权限


2)还要动态获取权限
在MainActivity中添加
private final int REQUEST_EXTERNAL_STORAGE = 1;
private String[] PERMISSIONS_STORAGE = {
Manifest.permission.READ_EXTERNAL_STORAGE,
Manifest.permission.WRITE_EXTERNAL_STORAGE };

         public  void verifyStoragePermissions(Activity activity) {    // Check if we have write permission    int permission = ActivityCompat.checkSelfPermission(activity,            Manifest.permission.WRITE_EXTERNAL_STORAGE);    if (permission != PackageManager.PERMISSION_GRANTED) {        // We don't have permission so prompt the user        ActivityCompat.requestPermissions(activity, PERMISSIONS_STORAGE,                REQUEST_EXTERNAL_STORAGE);    }}

记得在onCreat()方法中调用
verifyStoragePermissions(this);
当然可以简单粗暴的通过配置用户信息添加存储权限

2. targetSdkVersion过高


将targetSdkVersion改为26 本来我这里是29的 太高了 导致编译的时候出错 改为26就可以了

对于此次本地视频播放器的实现 最为纠结的就是页面显示 播放器出错 看了许多篇博客 都是权限的问题 我在最初的时候就添加了权限所以很可能不是这个问题 又尝试用其他方法实现播放 发现还是MediaPlayer好写一些可以用监听实现
还有一些博客说content provider这个没有试过 我试了调试的方法 发现能定位到uri的位置 还有最重要的一点 遇到问题 要自己分析 试着调试一下 找到问题的所在

本来以为实现不了了 又翻到一篇很有用的博客 改了targetSdkVersion就实现了本地视频的播放

下面附上一些代码

public class SystemVedioPlayer extends AppCompatActivity {

private VideoView videoView;private Uri uri;@Overrideprotected void onCreate(Bundle savedInstanceState) {    super.onCreate(savedInstanceState);    setContentView(R.layout.activity_system_vedio_player);    videoView=findViewById(R.id.videoview);    uri=getIntent().getData();    System.out.println("uri:"+uri);    videoView.setVideoURI(uri);   videoView.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {       @Override       public void onPrepared(MediaPlayer mp) {           videoView.start();       }   });    videoView.setOnErrorListener(new MediaPlayer.OnErrorListener() {        @Override        public boolean onError(MediaPlayer mp, int what, int extra) {            Toast.makeText(SystemVedioPlayer.this,"播放出错了",Toast.LENGTH_SHORT).show();            System.out.println("what:"+what+"\n extra: "+extra);            return true;        }    });    videoView.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {        @Override        public void onCompletion(MediaPlayer mp) {            Toast.makeText(SystemVedioPlayer.this,"播放已完成 ",Toast.LENGTH_SHORT).show();            finish();        }    });    //设置控制面板     videoView.setMediaController(new MediaController(this));}

}

//设置视频点击事件
vedioPager.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
MediaItem mediaItem=mediaItems.get(position);
//使用系统自带播放软件
// Intent intent=new Intent();
// intent.setDataAndType(Uri.parse(mediaItem.getData()),“video/");
// mContext.startActivity(intent);
Intent intent=new Intent(mContext, SystemVedioPlayer.class);
intent.setDataAndType(Uri.parse(mediaItem.getData()),"video/
”);
System.out.println("Uri.parse(mediaItem.getData(): "+Uri.parse(mediaItem.getData()));
mContext.startActivity(intent);

参考网址:
[1]: https://cloud.tencent.com/developer/article/1381003
[2]: https://blog.csdn.net/twc18638942853/article/details/53218659

更多相关文章

  1. 浅谈Java中Collections.sort对List排序的两种方法
  2. python list.sort()根据多个关键字排序的方法实现
  3. Android(安卓)Activity界面切换添加动画特效
  4. android EditText设置不可写
  5. Android(安卓)拨号器的简单实现
  6. android实现字体闪烁动画的方法
  7. Android中不同应用间实现SharedPreferences数据共享
  8. "Failed to fetch URL https://dl-ssl.google.com/android/repos
  9. [Android(安卓)NDK]Android(安卓)JNI开发例子 ---3 在JNI中实现o

随机推荐

  1. Mybatis特殊字符处理的详解
  2. MySql索引详细介绍及正确使用方法
  3. windows server2014 安装 Mysql Applying
  4. MySQL 5.7解压版安装、卸载及乱码问题的
  5. MySql带OR关键字的多条件查询语句
  6. Centos7使用yum安装MySQL及实现远程连接
  7. Mysql带And关键字的多条件查询语句
  8. Mysql 远程连接配置实现的两种方法
  9. MySQL 获得当前日期时间 函数
  10. Windows 10 与 MySQL 5.5 安装使用及免安