2010-06-22 31 views
10

我复制Song.mp3的到我的项目的资产目录,并写了这个代码:错误与URI或资产文件中创建的MediaPlayer

private MediaPlayer mp; 

Uri uri = Uri.parse("file:///android_asset/song.mp3"); 

mp=MediaPlayer.create(this, uri); 

运行create语句后,变量熔点为空。哪里不对?

谢谢。

回答

6

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

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不会抛出。

+0

我加了异常处理如你所说和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

+7

我通过修复代码来访问资产中的mp3文件来解决这个问题。 mp = new MediaPlayer(); AssetFileDescriptor afd = getAssets()。openFd(“song.mp3”); mp.setDataSource(afd.getFileDescriptor()); 谢谢杰勒! – CalvinS 2010-06-22 16:11:18

21

试试这个:

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) { } 
+1

这是为我做的。显式添加偏移量和长度。奇怪的是,只是给fd没有用。 – grebulon 2014-02-26 08:56:27

+0

这应该是被接受的答案。 – BoD 2015-01-05 13:03:15

相关问题