繁体   English   中英

使用ImageButton android播放音乐

[英]Playing musics with ImageButton android

我有一个要与ImageButton一起播放的音乐(.mp3)列表,我想播放每个声音及其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]);

我的算法正确吗?

您可以尝试一下:

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

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

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

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

您可以参考这篇文章以获得更多说明。

另一篇参考

希望能帮助到你。

现在,我将提示如何以简单的方式完成它。 您可以使用原始资源创建一个数组:

 int names[] = new int {R.raw.a,R.raw.b,R.raw.c};

不要像您那样做一个String数组,这将无法工作。 使用上面的示例,并像这样创建mediaplayer:

 MediaPlayer mp = MediaPlayer.create(LazyAdapter.this, names[0]);

编辑

从上面的示例中,我看到了一些错误的内容。

首先,您不能传递字符串来标识数组的编号。 您这样做是这样的:

     final String ambil = kata.get(3)

并且您试图获取mediaPlayer的资源,例如:

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

在那里,您传递了一个字符串以从names [] ---> R.raw.names [ambil]]获取资源。 不要写R.raw.names [],只写名字[]。

另外,您必须传递一个整数才能从数组中获取值,例如:

      names[0]

问题是,您从数据库中获得了哪个整数,您说您获得了id,但是值是多少? 为了便于说明,如果您写入名称[0],则意味着您获得了数组的第一个值(因为数组以0开头)。 在您的情况下,请参考资源R.raw.a。 如果要引用第二首歌曲,则必须写名称[1]。

我不知道您如何实现数据库以及以何种方式提供_id。 但是请确保以这种方式给出_id,使其不会高于资源数量。 如果您创建一个自动增量ID,则当该值大于歌曲数时,它将无法使用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM