我正在尝试动态播放声音。 我有一个资源难治,我在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索引上的歌曲名称来设置轨道切换的方法。
感谢您的帮助
答案 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(); }
}