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过高

Android Studio实现本地视频播放_第1张图片
将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. 谷歌开发工具android studio启动不了的解决方法
  2. android adb push 与 adb install的比较(两种安装APK的方法)
  3. 解决style attribute ‘@android:attr/windowEnterAnimation’ n
  4. Android 应用程序退出的四种方法
  5. android视频播放-饺子播放器
  6. Android绘图之Paint的使用方法详解
  7. Android Studio查看SQLite数据库方法大全
  8. 再说Android中实现全屏的方法

随机推荐

  1. Android使用mob快速集成分享功能详解
  2. Android6.0系统增加那些新特性
  3. Android中阻止AlertDialog关闭实例代码
  4. Android(安卓)Studio的插件开发
  5. android开发框架集合简介
  6. android-自定义Seekbar
  7. Android(安卓)读取元素的数据
  8. Android(安卓)debug时一直处于waiting fo
  9. 传说是藏地密码中的海蓝兽
  10. Android(安卓)Paint类方法说明