用ImageButton android播放音乐

时间:2014-06-26 07:26:07

标签: java android database sqlite

我有一个音乐列表(.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};

最后,我想用这个

创建一个MediaPlayer
MediaPlayer mp = MediaPlayer.create(LazyAdapter.this, R.raw.names[ambil]);

我的算法是对的吗?

2 个答案:

答案 0 :(得分:0)

你可以尝试一下:

首先,使用文件名获取资源ID:

int rid = context.getResources()
        .getIdentifier("filename","raw", context.getPackageName());

然后在输入流中获取文件:

InputStream iS;
iS = getResources().openRawResource(rID);

您可以参考this post获取更多解释。

Another post for reference

希望它有所帮助。

答案 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,那么当该值高于歌曲数量时,它将不起作用。

相关问题