我有一个音乐列表(.mp3),我想用ImageButton播放,我想用它的ID播放每个声音
首先,我有一个具有字段_id的数据库。然后,我试着
final String ambil = kata.get(3)
用于从我使用的查询中检索_id。然后,我用了
speaker.setTag(ambil);
扬声器是一个ImageButton,我想用它的_id标记每个按钮,这样它会发出彼此不同的声音。
然后,我订购了我用这个
的所有声音文件int names[] = {R.raw.a,R.raw.a,R.raw.c};
最后,我想用这个
创建一个MediaPlayerMediaPlayer mp = MediaPlayer.create(LazyAdapter.this, R.raw.names[ambil]);
我的算法是对的吗?
答案 0 :(得分:0)
你可以尝试一下:
首先,使用文件名获取资源ID:
int rid = context.getResources()
.getIdentifier("filename","raw", context.getPackageName());
然后在输入流中获取文件:
InputStream iS;
iS = getResources().openRawResource(rID);
您可以参考this post获取更多解释。
希望它有所帮助。
答案 1 :(得分:0)
现在,我将提示如何以简单的方式完成。您可以使用原始资源创建数组:
int names[] = new int {R.raw.a,R.raw.b,R.raw.c};
不要像你做的那样制作一个String数组,这是行不通的。使用上面的示例并创建如下的媒体播放器:
MediaPlayer mp = MediaPlayer.create(LazyAdapter.this, names[0]);
从上面的例子中,我看到了一些错误的东西。
首先,您无法传递String来标识数组的编号。你是这样做的:
final String ambil = kata.get(3)
并且您尝试获取mediaPlayer的资源,如:
MediaPlayer mp = MediaPlayer.create(LazyAdapter.this, R.raw.names[ambil]);
你传递一个字符串来从名字[] --->获取资源R.raw.names [ambil]]; 不要写R.raw.names [],只写名字[]。
此外,您必须传递一个整数才能从数组中获取值:
names[0]
问题是,你从你的数据库获得了哪个整数,你说你得到了一个id,但它的价值是多少?为了便于说明,如果您编写名称[0],则表示您获得了数组的第一个值(因为数组以0开头)。在您的情况下,您引用资源R.raw.a。如果你想引用第二首歌,你必须写名字[1]。
我不知道你如何实现你的数据库以及你给出_id的方式。但是请确保你给出了_id,它不会高于资源的数量。如果您创建了一个自动增量ID,那么当该值高于歌曲数量时,它将不起作用。