我的媒体播放器功能出了什么问题?

时间:2018-04-22 01:42:27

标签: java android android-mediaplayer

我在这上花了十多个小时,尝试了很多我在互联网上找到的解决方案,感觉很愚蠢...... 此函数只是在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(); }
    }
}

1 个答案:

答案 0 :(得分:0)

使用此代码获取该文件的resourceId

int resId = getResources().getIdentifier(audioName, "raw", getPackageName());

audioName应该没有任何扩展名。

使用此代码

创建播放器对象
player = MediaPlayer.create(context,resId);