0

为什么这段代码会抛出 IllegalArgumentException?我想显示位于“原始”文件夹中的 MP3 文件的标题

mediaPlayer = MediaPlayer.create(getActivity(), R.raw.willy_william_ego);
            MediaMetadataRetriever mmr = new MediaMetadataRetriever();
            Uri uri = (Uri) Uri.fromFile(new File("android.resource://com.hthl.kellergassen_app/raw/willy_william_ego"));
            mmr.setDataSource(getActivity(), uri);
            String title = mmr.extractMetadata(MediaMetadataRetriever.METADATA_KEY_TITLE);
4

1 回答 1

1

假设您在 setDataSource 中遇到问题,那是因为您传入的 URI 由于某种原因无效 - 很可能是因为找不到文件。您确定它以该名称存在并且没有文件扩展名吗?

从Javadoc...

void setDataSource(上下文上下文,Uri uri)

将数据源设置为内容 Uri。在此类中的其余方法之前调用此方法。这种方法可能很耗时。

参数 context Context:解析Uri时使用的Context uri Uri:要播放的数据的Content URI

如果 Uri 无效,则抛出 IllegalArgumentException 如果 Uri 由于缺少权限而无法使用,则抛出 SecurityException。

更新 - 查看您的代码后,您似乎使用硬编码的字符串com.hthl.kellergassen_app作为包名称,但这是不对的。根据com.htlhl.kellergassen_app堆栈跟踪,请注意“htlhl”中的额外“l”(这是您用于创建 URI 的字符串)。

于 2016-08-01T15:02:29.600 回答