Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/191.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何防止音频重叠_Android_Audio - Fatal编程技术网

Android 如何防止音频重叠

Android 如何防止音频重叠,android,audio,Android,Audio,我有一个简单的列表视图和一些歌曲的名称。当你点击其中一个孩子时,歌曲就会播放。但是,我注意到,当你在播放时不小心再次点击它时,它会再次开始播放,导致声音重叠。如何设置它,以便当您单击一首歌曲,然后单击另一首歌曲时,第一首歌曲停止,第二首歌曲开始。如何修改代码以实现这一点。任何帮助都将不胜感激 public class TwelveGrammar extends ActionBarActivity { private ListView lv; pr

我有一个简单的列表视图和一些歌曲的名称。当你点击其中一个孩子时,歌曲就会播放。但是,我注意到,当你在播放时不小心再次点击它时,它会再次开始播放,导致声音重叠。如何设置它,以便当您单击一首歌曲,然后单击另一首歌曲时,第一首歌曲停止,第二首歌曲开始。如何修改代码以实现这一点。任何帮助都将不胜感激

                        public class TwelveGrammar extends ActionBarActivity {

private ListView lv;
private MediaPlayer mp;



@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.twelve_grm);



    lv = (ListView) findViewById(R.id.list); 

    ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String> (
            this, android.R.layout.simple_list_item_1, Exp_list);

    lv.setAdapter(arrayAdapter);

    lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {

        @Override
        public void onItemClick(AdapterView<?> arg0, View view, int pos,
                long id) {

            if (mp.isPlaying()) {

                mp.stop();

            }

            else {
            if (pos==0) {

                mp = MediaPlayer.create(getBaseContext(), R.raw.g_1200);
                mp.start();
                mp.setOnCompletionListener(new OnCompletionListener() {
                    public void onCompletion(MediaPlayer mp) {
                        mp.release();
                        }
                });

            }

            if (pos==1) {

                mp = MediaPlayer.create(getBaseContext(), R.raw.g_1201);
                mp.start();
                mp.setOnCompletionListener(new OnCompletionListener() {
                    public void onCompletion(MediaPlayer mp) {
                        mp.release();

                        }
                });
            }

            if (pos==2) {

                mp = MediaPlayer.create(getBaseContext(), R.raw.g_1202);
                mp.start();
                mp.setOnCompletionListener(new OnCompletionListener() {
                    public void onCompletion(MediaPlayer mp) {
                        mp.release();
                        }
                });
            }

            if (pos==3) {

                mp = MediaPlayer.create(getBaseContext(), R.raw.g_1203);
                mp.start();
                mp.setOnCompletionListener(new OnCompletionListener() {
                    public void onCompletion(MediaPlayer mp) {
                        mp.release();
                        }
                });

            }


            if (pos==4) {

                mp = MediaPlayer.create(getBaseContext(), R.raw.g_1204);
                mp.start();
                mp.setOnCompletionListener(new OnCompletionListener() {
                    public void onCompletion(MediaPlayer mp) {
                        mp.release();
                        }
                });
            }

            if (pos==5) {

                mp = MediaPlayer.create(getBaseContext(), R.raw.g_1205);
                mp.start();
                mp.setOnCompletionListener(new OnCompletionListener() {
                    public void onCompletion(MediaPlayer mp) {
                        mp.release();
                        }
                });

            }

            if (pos==6) {

                mp = MediaPlayer.create(getBaseContext(), R.raw.g_1206);
                mp.start();
                mp.setOnCompletionListener(new OnCompletionListener() {
                    public void onCompletion(MediaPlayer mp) {
                        mp.release();
                        }
                });

            }

            if (pos==7) {

                mp = MediaPlayer.create(getBaseContext(), R.raw.g_1207);
                mp.start();
                mp.setOnCompletionListener(new OnCompletionListener() {
                    public void onCompletion(MediaPlayer mp) {
                        mp.release();
                        }
                });

            }

            if (pos==8) {

                mp = MediaPlayer.create(getBaseContext(), R.raw.g_1208);
                mp.start();
                mp.setOnCompletionListener(new OnCompletionListener() {
                    public void onCompletion(MediaPlayer mp) {
                        mp.release();
                        }
                });

            }

            if (pos==9) {

                mp = MediaPlayer.create(getBaseContext(), R.raw.g_1209);
                mp.start();
                mp.setOnCompletionListener(new OnCompletionListener() {
                    public void onCompletion(MediaPlayer mp) {
                        mp.release();
                        }
                });

            }

            if (pos==10) {

                mp = MediaPlayer.create(getBaseContext(), R.raw.g_1210);
                mp.start();
                mp.setOnCompletionListener(new OnCompletionListener() {
                    public void onCompletion(MediaPlayer mp) {
                        mp.release();
                        }
                });

            }

            if (pos==11) {

                mp = MediaPlayer.create(getBaseContext(), R.raw.g_1211);
                mp.start();
                mp.setOnCompletionListener(new OnCompletionListener() {
                    public void onCompletion(MediaPlayer mp) {
                        mp.release();
                        }
                });

            }

            if (pos==12) {

                mp = MediaPlayer.create(getBaseContext(), R.raw.g_1212);
                mp.start();
                mp.setOnCompletionListener(new OnCompletionListener() {
                    public void onCompletion(MediaPlayer mp) {
                        mp.release();
                        }
                });

            }

            if (pos==13) {

                mp = MediaPlayer.create(getBaseContext(), R.raw.g_1213);
                mp.start();
                mp.setOnCompletionListener(new OnCompletionListener() {
                    public void onCompletion(MediaPlayer mp) {
                        mp.release();
                        }
                });

            }
               if (pos==14) {

                mp = MediaPlayer.create(getBaseContext(), R.raw.g_1214);
                mp.start();
                mp.setOnCompletionListener(new OnCompletionListener() {
                    public void onCompletion(MediaPlayer mp) {
                        mp.release();
                        }
                });

            }
      if (pos==15) {

mp = MediaPlayer.create(getBaseContext(), R.raw.g_1215);
mp.start();
mp.setOnCompletionListener(new OnCompletionListener() {
    public void onCompletion(MediaPlayer mp) {
        mp.release();
        }
});

        }

}

我认为你应该有一首类似布尔的歌曲在播放,如果是真的,上一首歌应该停止,新的应该开始。我相信处理mediaplayer的最佳方式是服务。我还不太熟悉,但我已经实现了一个服务的背景音乐和它的控制取决于用户的行动,它的工作相当好

MyService.class

在我的主要活动中,我有一个按钮,可以根据音乐是否播放来启动和停止服务

Intent play;
play = new Intent(getApplicationContext(), MyService.class);


在谷歌上搜索一下,你会发现一些不错的教程。希望我能为您提供帮助。

听起来您希望用户能够在已播放歌曲的同时开始播放另一首歌曲,同时停止当前歌曲。那么为什么MediaPlayer创建代码在if isplay的else子句中?你真的应该去掉那些不必要的if语句,因为它们本质上是一样的。将声音资源ID放入某种数组中,并使用pos对数组进行索引。
Intent play;
play = new Intent(getApplicationContext(), MyService.class);
sound.setOnClickListener(new OnClickListener(){
        @Override
        public void onClick(View v) {
            if(isPlaying){
                stopService(play);
                isPlaying = false;
                sound.setText("Yes");
            } else {
                startService(play);
                isPlaying = true;
                sound.setText("No");
            }
        }
    });