Android -动态更改在mediaplayer中播放的文件

2exbekwf  于 2022-12-09  发布在  Android
关注(0)|答案(2)|浏览(189)

我正在尝试动态播放声音。
我有一个资源目录,我已经创建下res文件夹,这是所谓的“原始”。这个目录包含mp3文件。
我想做的是用所有的文件名创建一个数组,当点击一个按钮时,下一个mp3 int和下一个索引将被加载到媒体播放器中,并可播放。
我找到了使用mediaplayer的代码

public class MainActivity extends ActionBarActivity {
Context context = this;
MediaPlayer mp;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main_layout);
    mp = MediaPlayer.create(context, R.raw.sound);
    final Button b = (Button) findViewById(R.id.Button);
    b.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

            try {
                if (mp.isPlaying()) {
                    mp.stop();
                    mp.release();
                    mp = MediaPlayer.create(context, R.raw.sound);
                } mp.start();
            } catch(Exception e) { e.printStackTrace(); }
        }
    });
}
}

但我似乎找不到通过Array使用i索引上的歌曲名称来设置曲目切换的方法。
谢谢你的帮助

vwkv1x7d

vwkv1x7d1#

我已经找到了一个解决方案。我已经设置了所有的文件名在原始目录与相同的名称模式,得到每个文件的资源id的名称,并加载到播放器。

Resources res = getResources(); //resource handle
    String url = "song" +index;
    InputStream is = getClass().getClassLoader().getResourceAsStream("raw/");
    Integer resIdSound = res.getIdentifier (url,  "raw", this.getPackageName());
    mp = MediaPlayer.create(this, resIdSound);
    try {
        if (mp.isPlaying()) {
            mp.stop();
            mp.release();
            mp = MediaPlayer.create(this, resIdSound);
        } mp.start();
    } catch(Exception e) { e.printStackTrace(); }
}
uajslkp6

uajslkp62#

1.基于此来源:
dynamically getting all image resource id in an array
您可以尝试编写以下代码:

Field[] fields= R.raw.class.getFields();
int[] resArray = new int[fields.length];
for(int i = 0; i < fields.length; i++) {
    try {
        resArray[i] = fields[i].getInt(null);
    } catch (IllegalArgumentException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}

resArray[]将包含您在raw文件夹中拥有的所有id。
2.如果你想使用文件名,你可以使用Resources类中的int getIdentifier(String name,String defType,String defPackage)方法。
3.如果您想使用外部存储中的文件,您可以使用文件路径轻松创建Media Player示例(记住权限)

相关问题