问题描述: 在使用Android 10中的API 29时,调用android.media.MediaMetadataRetriever.setDataSource方法时,会发生java.lang.IllegalArgumentException异常。
解决方法: Android 10中的API 29对于setDataSource方法的参数做了一些限制,需要传递一个FileDescriptor或Uri对象,而不再支持传递文件路径的方式。
以下是解决该问题的代码示例:
// 1. 获取要设置数据源的文件路径
String filePath = "your_file_path";
// 2. 创建一个Uri对象
Uri uri = Uri.parse(filePath);
// 3. 使用ContentResolver获取文件的FileDescriptor
ContentResolver contentResolver = context.getContentResolver();
ParcelFileDescriptor parcelFileDescriptor = contentResolver.openFileDescriptor(uri, "r");
FileDescriptor fileDescriptor = parcelFileDescriptor.getFileDescriptor();
// 4. 创建MediaMetadataRetriever对象并设置数据源
MediaMetadataRetriever retriever = new MediaMetadataRetriever();
retriever.setDataSource(fileDescriptor);
// 5. 使用完成后记得释放资源
parcelFileDescriptor.close();
通过以上代码示例,我们可以在Android 10中正常使用setDataSource方法,并避免java.lang.IllegalArgumentException异常的发生。请确保替换your_file_path
为实际的文件路径。