我复制Song.mp3的到我的项目的资产目录,并写了这个代码:错误与URI或资产文件中创建的MediaPlayer
private MediaPlayer mp;
Uri uri = Uri.parse("file:///android_asset/song.mp3");
mp=MediaPlayer.create(this, uri);
运行create语句后,变量熔点为空。哪里不对?
谢谢。
我复制Song.mp3的到我的项目的资产目录,并写了这个代码:错误与URI或资产文件中创建的MediaPlayer
private MediaPlayer mp;
Uri uri = Uri.parse("file:///android_asset/song.mp3");
mp=MediaPlayer.create(this, uri);
运行create语句后,变量熔点为空。哪里不对?
谢谢。
试试这个,看看是否有任何异常被捕获:
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());
}
者将解释什么是你创造出错的例外。根据文档,静态创建方法只是上面的try块中的简写。我可以看到的主要区别在于setDataSource所做的静态方法create不会抛出。
试试这个:
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) { }
我加了异常处理如你所说和mp.prepare()语句,我就准备() 06-22 14收到此错误:45:20.806:ERROR/PlayerDriver(554):命令PLAYER_SET_DATA_SOURCE完成一个错误或信息PVMFErrNotSupported 06-22 14:45:20.806:错误/ MediaPlayer(857):错误(1,-4) 06-22 14:45:20.987 :DEBUG/dalvikvm(857):使用exceptObj返回的JDWP调用= 0x43744d68 06-22 14:45:33.056:DEBUG/ASSETTEST(857):IOException:准备e失败:status = 0x1 6-22 14:45:43.068:WARN/System.err(857):java.io.IOException:Prepare failed .: status = 0x1 Next? – CalvinS 2010-06-22 14:52:24
我通过修复代码来访问资产中的mp3文件来解决这个问题。 mp = new MediaPlayer(); AssetFileDescriptor afd = getAssets()。openFd(“song.mp3”); mp.setDataSource(afd.getFileDescriptor()); 谢谢杰勒! – CalvinS 2010-06-22 16:11:18