最近在做视频抽帧功能,在使用MediaMetadataRetriever的setDataSource方法时,总是抛出IllegalArgumentException异常,在网络漫游很久最终总结三点原因:
1.文件路径不对
这点不用多说,首先判断下文件是否存在,然后可以用你的路径下的视频进行播放。可以播放证明文件路径没有问题。
2.文件访问权限不够
结合这两点原因我排查了一下,发现确实是我的权限不够导致的,因为我测试时使用的Android 10.0的手机,虽然我已经动态申请了权限,但是Android10对权限的管理更加严格了,主要有以下两点:
(1)、权限按单个分配,不再按组分配,以前申请了读存储卡权限,即可获得同组的读写权限,现在需要逐个申请
(2)、存储卡读写权限需要在Application的Manifest清单中声明
Android10.0 需要在AndroidManifest.xml文件中application出加上 android:requestLegacyExternalStorage="true"
3.需要动态获取权限
重点:需要用户手动允许权限
if (Build.VERSION.SDK_INT >= 23) {
int REQUEST_CODE_CONTACT = 101;
String[] permissions = {Manifest.permission.RECORD_AUDIO,
Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.READ_EXTERNAL_STORAGE};
//验证是否许可权限
for (String str : permissions) {
if (this.checkSelfPermission(str) != PackageManager.PERMISSION_GRANTED) {
//申请权限
this.requestPermissions(permissions, REQUEST_CODE_CONTACT);
}
}
}
最终完美解决。
网友评论