使用Uri或资产文件创建MediaPlayer时出错

我将song.mp3复制到我项目的资产目录并编写了这段代码:

private MediaPlayer mp; Uri uri = Uri.parse("file:///android_asset/song.mp3"); mp=MediaPlayer.create(this, uri); 

运行create语句后,variablesmp为null。 哪里不对?

谢谢。

试试这个,看看是否有任何exception被捕获:

 try { MediaPlayer mp = new MediaPlayer(); mp.setDataSource(this, uri); } catch (NullReferenceArgument e) { Log.d(TAG, "NullReferenceException: " + e.getMessage()); } catch (IllegalStateException e) { Log.d(TAG, "IllegalStateException: " + e.getMessage()); } catch (IOException e) { Log.d(TAG, "IOException: " + e.getMessage()); } catch (IllegalArgumentException e) { Log.d(TAG, "IllegalArgumentException: " + e.getMessage()); } catch (SecurityException e) { Log.d(TAG, "SecurityException: " + e.getMessage()); } 

捕获的exception将解释您的创建中出现的问题。 根据文档,静态创建方法只是上面的try块中的简写。 我可以看到的主要区别是静态方法create不会在setDataSource执行时抛出。

尝试这个:

 try { AssetFileDescriptor afd = getAssets().openFd("AudioFile.mp3"); player = new MediaPlayer(); player.setDataSource(afd.getFileDescriptor(),afd.getStartOffset(),afd.getLength()); player.prepare(); player.start(); } catch (IllegalArgumentException e) { } catch (IllegalStateException e) { } catch (IOException e) { }