我在这上花了十多个小时,尝试了很多我在互联网上找到的解决方案,感觉很愚蠢......
此函数只是在MediaPlayer中加载ogg文件。它将文件的url作为字符串参数。它首先提取文件的名称并尝试从res/raw/
加载它,如果它存在,那么它从网站上获取它。
MediaPlayer player ;
void snd_load(String url) {
String id_snd = url.substring(url.lastIndexOf("/") + 1); // name of the file
try{
player.setDataSource( "android.resource://didi.a8bitpocketwrestlers/res/raw/" + id_snd );
}
catch (Exception e){
Toast.makeText(getApplicationContext(), "can't open file, will try to download it"+"\n"+e , Toast.LENGTH_SHORT).show();
try{ player.setDataSource(url); }
catch (Exception e2){ Toast.makeText(getApplicationContext(), "can't download file"+"\n"+e2 , Toast.LENGTH_SHORT).show(); }
}
}
两者都出现java.lang.NULLPointerException
错误。
我现在明白了,玩家只是MediaPlayer类型,它还没有指出任何东西。我错了,因为里面有属性所以我认为对象存在。我必须player = new MediaPlayer();
或player = MediaPlayer.create();
。
现在我修复了这个,我仍然无法加载文件。
04-22 15:31:58.018 130-4150 /? E / FileSource:无法打开文件 'android.resource://didi.a8bitpocketwrestlers/snd_title.ogg'。 (没有这样的 文件或目录)04-22 15:31:58.018 4087-4099 / didi.a8bitpocketwrestlers E / MediaPlayer:错误(1, -2147483648)04-22 15:31:58.018 4087-4087 / didi.a8bitpocketwrestlers E / MediaPlayer:错误(1,-2147483648)
它停止,它不会显示消息,也不会尝试下载。
player = MediaPlayer.create(getApplicationContext(), R.raw.snd_title );
因player.prepareAsync();
电话而崩溃。我读到.create已经处理好了,所以我不能调用.prepareAsync();也不要使用.setOnPreparedListener()。这对我来说是一个问题,我需要知道什么时候准备就绪。
无论如何我必须在变量id_snd中使用该名称,而不仅仅是snd_title.ogg文件,因此我将其更改为player = MediaPlayer.create(getApplicationContext(), getApplicationContext().getResources().getIdentifier(id_snd, "raw", getApplicationContext().getPackageName()) );
并获得
android.content.res.Resources $ NotFoundException:资源ID#0x0
新版
MediaPlayer player ;
void snd_load(String url) {
String id_snd = url.substring(url.lastIndexOf("/") + 1); // name of the file
id_snd = id_snd.substring( 0 , id_snd.indexOf(".") ) ; // to remove ".ogg" or ".aac"
try{
player = MediaPlayer.create(getApplicationContext(), getApplicationContext().getResources().getIdentifier(id_snd, "raw", getApplicationContext().getPackageName()) );
}
catch (Exception e){
Toast.makeText(getApplicationContext(), "can't open file, will try to download it"+"\n"+e , Toast.LENGTH_SHORT).show();
try{ player = MediaPlayer.create(getApplicationContext(), Uri.parse(url)); }
catch (Exception e2){ Toast.makeText(getApplicationContext(), "can't download file"+"\n"+e2 , Toast.LENGTH_SHORT).show(); }
}
}
答案 0 :(得分:0)
使用此代码获取该文件的resourceId
int resId = getResources().getIdentifier(audioName, "raw", getPackageName());
audioName应该没有任何扩展名。
使用此代码
创建播放器对象player = MediaPlayer.create(context,resId);