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

时间:2016-10-07 08:20:46

标签: java android android-mediaplayer

我正在尝试动态播放声音。 我有一个资源难治,我在res文件夹下创建了一个名为“raw”的资源。这个难治的包含mp3文件。 我想要做的是创建一个包含所有文件名的数组,当点击一个按钮时,下一个索引的下一个索引将被加载到媒体播放器并且可以播放。

我找到了使用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(); }
        }
    });
}
}

但是我似乎找不到使用i索引上的歌曲名称来设置轨道切换的方法。

感谢您的帮助

2 个答案:

答案 0 :(得分:1)

1.基于此来源:

dynamically getting all image resource id in an array

您可以尝试编写此类代码:

SELECT  v.TABLE_NAME, EXPLAIN v.VIEW_DEFINITION FROM information_schema.views as v

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[]文件夹中的所有ID。

2.如果您想使用文件名,可以使用raw课程中的int getIdentifier (String name, String defType, String defPackage)方法。

3.如果您想使用外部存储中的文件,您可以使用文件路径轻松创建Resources实例(请记住权限)

答案 1 :(得分:1)

我找到了解决方案。 我已经在原始难治中设置了具有相同名称模式的所有文件名, 通过名称获取每个文件资源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(); }
}