Java 每次单击按钮时播放音频
我的项目有两个音频文件,'dog.mp3'和'cat.mp3',因此下面的代码允许我根据特定的列表视图项单击来播放任何一种声音,但是我如何修改代码以实现以下目标?:Java 每次单击按钮时播放音频,java,android,audio,android-studio,Java,Android,Audio,Android Studio,我的项目有两个音频文件,'dog.mp3'和'cat.mp3',因此下面的代码允许我根据特定的列表视图项单击来播放任何一种声音,但是我如何修改代码以实现以下目标?: 当播放“cat.mp3”时,如果我点击“dog.mp3”的列表视图项,我希望“cat.mp3”文件停止播放,“dog.mp3”音频停止播放 播放“dog.mp3”时,如果我点击“cat.mp3”的列表视图项,我希望“dog.mp3”文件停止播放,“cat.mp3”音频停止播放 一切帮助都将不胜感激 mainList.setOnI
- 当播放“cat.mp3”时,如果我点击“dog.mp3”的列表视图项,我希望“cat.mp3”文件停止播放,“dog.mp3”音频停止播放
- 播放“dog.mp3”时,如果我点击“cat.mp3”的列表视图项,我希望“dog.mp3”文件停止播放,“cat.mp3”音频停止播放
mainList.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int position, long id) {
if (position == 0) {
mp = MediaPlayer.create(Test.this, R.raw.cat);
mp.start();
}
if (position == 1) {
mp = MediaPlayer.create(Test.this, R.raw.dog);
mp.start();
}
}
});
mainList.setOnItemClickListener(新的AdapterView.OnItemClickListener(){
@凌驾
public void onItemClick(AdapterView AdapterView,视图视图,整型位置,长id){
如果(位置==0){
mp=MediaPlayer.create(Test.this,R.raw.cat);
mp.start();
}
如果(位置==1){
mp=MediaPlayer.create(Test.this,R.raw.dog);
mp.start();
}
}
});
错误
import android.media.MediaPlayer;
import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ListView;
public class MainActivity extends ActionBarActivity {
ListView mainList;
String[] listContent = {
"chimes", "chord", "ding",
"notify", "recycle", "ringin",
"ringout", "tada"
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mainList = (ListView)findViewById(R.id.main_listView);
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,listContent);
mainList.setAdapter(adapter);
int[] resID = { R.raw.chimes, R.raw.chord, R.raw.ding,
R.raw.notify, R.raw.recycle, R.raw.ringin, R.raw.ringout, R.raw.tada };
mainList.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int position, long id) {
playSong(position);
}
});
public void playSong(int songIndex) {
// Play song
mp.reset();
mp.setDataSource(resID[songIndex]);
mp.start();
mp.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mp) {
// TODO Auto-generated method stub
mp.release();
}
});
}
}
}
导入android.media.MediaPlayer;
导入android.os.Bundle;
导入android.support.v7.app.ActionBarActivity;
导入android.view.Menu;
导入android.view.MenuItem;
导入android.view.view;
导入android.widget.AdapterView;
导入android.widget.ArrayAdapter;
导入android.widget.ListView;
公共类MainActivity扩展了ActionBarActivity{
ListView主列表;
字符串[]listContent={
“钟声”、“和弦”、“叮当声”,
“通知”、“回收”、“振铃”,
“振铃”,“塔达”
};
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mainList=(ListView)findViewById(R.id.main\u ListView);
ArrayAdapter=新的ArrayAdapter(这是android.R.layout.simple\u list\u item\u 1,listContent);
mainList.setAdapter(适配器);
int[]resID={R.raw.chimes,R.raw.chord,R.raw.ding,
R.raw.notify,R.raw.recycle,R.raw.ringin,R.raw.ringout,R.raw.tada};
mainList.setOnItemClickListener(新的AdapterView.OnItemClickListener(){
@凌驾
public void onItemClick(AdapterView AdapterView,视图视图,整型位置,长id){
播放歌曲(位置);
}
});
公共void播放歌曲(int歌曲索引){
//播放歌曲
mp.reset();
mp.setDataSource(resID[songIndex]);
mp.start();
mp.setOnCompletionListener(新的MediaPlayer.OnCompletionListener(){
@凌驾
完成时的公共作废(MediaPlayer mp){
//TODO自动生成的方法存根
mp.release();
}
});
}
}
}
您可能应该使用
声音池来实现以下目的:
您可以加载onCreate中的所有音频,并将maxStreams设置为1,以便一次只能播放一个声音。import android.app.Activity;
import android.app.Activity;
import android.media.MediaPlayer;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ListView;
public class MainActivity extends Activity {
// variable declaration
private ListView mainList;
private MediaPlayer mp;
private final String[] listContent = { "chimes", "chord", "ding", "notify",
"recycle", "ringin", "ringout", "tada" };
private final int[] resID = { R.raw.chimes, R.raw.chord, R.raw.ding,
R.raw.notify, R.raw.recycle, R.raw.ringin, R.raw.ringout,
R.raw.tada };
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// Initializing variables
mp = new MediaPlayer();
mainList = (ListView) findViewById(R.id.main_listView);
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_1, listContent);
mainList.setAdapter(adapter);
mainList.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view,
int position, long id) {
playSong(position);
}
});
}
public void playSong(int songIndex) {
// Play song
mp.reset();// stops any current playing song
mp = MediaPlayer.create(getApplicationContext(), resID[songIndex]);// create's
// new
// mediaplayer
// with
// song.
// if you don't know what is getApplicationContext() here better use
// MainActivity.this or yourclassname.this
mp.start(); // starting mediaplayer
// setting up what to do if current song completes.
/*
* mp.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
*
* @Override public void onCompletion(MediaPlayer mp) { // TODO
* Auto-generated method stub
*
* } });
*/
}
@Override
public void onDestroy() {
super.onDestroy();
mp.release();
}
}
导入android.media.MediaPlayer;
导入android.os.Bundle;
导入android.view.Menu;
导入android.view.MenuItem;
导入android.view.view;
导入android.widget.AdapterView;
导入android.widget.ArrayAdapter;
导入android.widget.ListView;
公共类MainActivity扩展了活动{
//变量声明
私有ListView主列表;
私人媒体播放器;
私有最终字符串[]listContent={“钟声”、“和弦”、“叮当”、“通知”,
“回收”、“振铃”、“振铃”、“塔达”};
私有final int[]resID={R.raw.chimes,R.raw.chord,R.raw.ding,
R.raw.notify,R.raw.recycle,R.raw.ringin,R.raw.ringout,
R.raw.tada};
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//初始化变量
mp=新媒体播放器();
mainList=(ListView)findViewById(R.id.main\u ListView);
ArrayAdapter=新的ArrayAdapter(此,
android.R.layout.simple_list_item_1,listContent);
mainList.setAdapter(适配器);
mainList.setOnItemClickListener(新的AdapterView.OnItemClickListener(){
@凌驾
公共无效onItemClick(AdapterView AdapterView,视图,
内部位置,长id){
播放歌曲(位置);
}
});
}
公共void播放歌曲(int歌曲索引){
//播放歌曲
mp.reset();//停止当前播放的任何歌曲
mp=MediaPlayer.create(getApplicationContext(),resID[songIndex]);//create的
//新的
//媒体播放器
//与
//歌。
//如果您不知道这里的getApplicationContext()是什么,最好使用
//MainActivity.this或yourclassname.this
mp.start();//启动mediaplayer
//设置当前歌曲完成后的操作。
/*
*mp.setOnCompletionListener(新的MediaPlayer.OnCompletionListener(){
*
*@Override public void onCompletion(MediaPlayer mp){//TODO
*自动生成的方法存根
*
* } });
*/
}
@凌驾
公共空间{
super.ondestory();
mp.release();
}
}
使用您的代码后,我仍然会遇到错误。请检查上面的截图和我的更新代码。添加此私有MediaPlayer mp;在onCreate()和这个mp=new MediaPlayer()之上;在setContentView()之后,单击“确定”。只剩下1个错误无法解析符号“resID”
。N