Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android资产文件夹:它总是按字母顺序取第一个文件_Android_Assets - Fatal编程技术网

Android资产文件夹:它总是按字母顺序取第一个文件

Android资产文件夹:它总是按字母顺序取第一个文件,android,assets,Android,Assets,我是Java/Android编程新手,请耐心等待 我试着播放一个mp3,它位于资产文件夹中。我知道/res/raw/文件夹还有另一种方法,但请使用assets文件夹,因为稍后我将尝试通过字符串访问该文件 此代码用于播放mp3文件: try { MediaPlayer mp = new MediaPlayer(); FileDescriptor sfd = getAssets().openFd("song.mp3").getFileDesc

我是Java/Android编程新手,请耐心等待

我试着播放一个mp3,它位于资产文件夹中。我知道/res/raw/文件夹还有另一种方法,但请使用assets文件夹,因为稍后我将尝试通过字符串访问该文件

此代码用于播放mp3文件:

        try
    {
        MediaPlayer mp = new MediaPlayer(); 
        FileDescriptor sfd = getAssets().openFd("song.mp3").getFileDescriptor(); 


        mp.setDataSource(sfd); 
        mp.prepare(); 
        mp.start();
    }
    catch(Exception e) {}
现在的问题是:在同一个资产文件夹中存储了另一个mp3文件。虽然我指定了mp3的名称来使用它,但以字母表中第一个为准。另一个文件名为music.mp3,它播放这个文件。将其重命名为worldmusic.mp3将播放song.mp3。将worldmusic.mp3重新命名为music.mp3将再次使用此mp3。另一个测试:将song.mp3重命名为其他名称,以便应用程序可以找到上面代码指定的内容,这将导致不播放歌曲。所以这意味着歌曲名必须存在,尽管它需要字母表中歌曲的首字母

我正在用eclipse的AVD模拟器进行测试。但我认为,在真正的设备上,这种行为是相同的


有人知道这个问题吗?

我不认为使用FileDescriptor是正确的方法。请尝试使用.create和Uri:

MediaPlayer mp = MediaPlayer.create(getBaseContext(), songUri);
mp.start();

我不认为使用FileDescriptor是正确的方法。请尝试使用.create和Uri:

MediaPlayer mp = MediaPlayer.create(getBaseContext(), songUri);
mp.start();

不知道为什么,但URI语法似乎不适用于资产。请尝试获取AssetFileDescriptor,如相关问题中所述:


不知道为什么,但URI语法似乎不适用于资产。请尝试获取AssetFileDescriptor,如相关问题中所述: