android 只允一个程序,Android – 我如何一次只允许一个MediaPlayer实例播放?

我正在尝试使用ListView项目作为按钮创建一个简单的Sound-board

Android应用程序. (顺便说一句,我是新手程序员)

我的想法是按下按钮,播放特定的声音文件.如果我在播放声音时按任何按钮,它应首先停止该声音,然后开始播放新声音.

目前声音播放时不会停止任何当前正在播放的声音,所以如果我发送垃圾按钮,我会同时播放多个声音(如果我一次按太多声音,应用程序强制关闭).

我尝试过使用以下几种变体:

if (mp.isPlaying()) {

mp.stop();

}

但根据我在其他几个来源上读到的内容,我正在创建MediaPlayer类的多个实例,即使它们具有相同的名称,stop()方法也会尝试停止最新的mp实例(在某些情况下它不是甚至还没创造出来.

我猜我的MediaPlayer类的一般实现是错误的,但它是我能想到的最好的.

无论如何,这是相关的代码块:

public class soundTest extends Activity {

private ListView lv1;

private String lv_arr[]={"test 1","test 2","test 3","test 4","test 5"};

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

lv1=(ListView)findViewById(R.id.ListView01);

lv1.setAdapter(new ArrayAdapter(this,R.layout.list_item, lv_arr));

lv1.setOnItemClickListener(new OnItemClickListener() {

public void onItemClick(AdapterView> parent, View view,int position, long id) {

if (lv1.getItemAtPosition(position)=="test 1") {

MediaPlayer mp = MediaPlayer.create(getApplicationContext(),R.raw.sound1);

mp.start();

mp.setOnCompletionListener(new OnCompletionListener() {

public void onCompletion(MediaPlayer mp) {

mp.release();

}

});

}

if (lv1.getItemAtPosition(position)=="test 2") {

MediaPlayer mp = MediaPlayer.create(getApplicationContext(),R.raw.sound2);

mp.start();

mp.setOnCompletionListener(new OnCompletionListener() {

public void onCompletion(MediaPlayer mp) {

mp.release();

}

});

}

//And the rest of the sounds 3,4,5.

}

});

}

}

任何帮助将不胜感激,谢谢.

编辑(3月22日):

我找到了以下应该有效的代码:

mp.setDataSource(context, Uri.parse("android.resource://" + Config.PACKAGE + "/" + resId));

但是,我无法弄清楚“Config.PACKAGE”部分是如何工作的.我只是得到一个错误“PACKAGE无法解决,或者不是一个字段”.

我尝试用包名替换“PACKAGE”,同样的错误.我也尝试过:

try {

mp.setDataSource(getApplicationContext(),Uri.parse("android.resource://com.mptest/" + R.raw.test2));

} catch (IOException e) {

e.printStackTrace();

}

但我无法正确地代替“//com.mptest/”.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值