如何在旅途中调整SoundPool音量?

时间:2013-08-14 23:28:01

标签: android android-asynctask soundpool

我正在尝试创建Android应用程序,它将连续播放两个短音。我必须随时调整音量,它应该是立体声。我的意思是左侧音量可能会变大,而右侧音量可能会变得更安静。我怎样才能做到这一点?我已经创建了一个AsyncTask,如下所示,我将同时运行其中的两个。这是一种正确的方法吗?

private class PlaySoundTask extends AsyncTask<Void, Void, Void> {

    @Override
    protected void onCancelled() {
        super.onCancelled();
    }

    @Override
    protected void onPreExecute() {

    SoundPool sndPool = new SoundPool(16, AudioManager.STREAM_MUSIC, 100);
    sndPool.load(R.raw.soundOne, 1);

    }

    @Override
    protected Void doInBackground(String... params) {
        while (m_stop_sound) {


            sndPlay.play(R.raw.soundOne, 1, 0, 0);


        }
        return null;
    }
}

1 个答案:

答案 0 :(得分:0)

不,这种方法不正确的原因很简单。根据您运行的版本,两个AsyncTask可能无法同时运行:

https://groups.google.com/forum/?fromgroups#!topic/android-developers/8M0RTFfO7-M

您可以使用AsyncTask.executeOnExecutor(...)覆盖此行为,但仍然是,您将定位从API 11开始的系统,这大约是可用设备的60%:

http://developer.android.com/about/dashboards/index.html

此外,AsyncTask不适用于长时间运行的操作,因为它们很容易被系统杀死以检索内存。如果它持有对不再使用的活动的引用,则可能导致内存泄漏。

使用您自己的Thread并可能使用Handler来通知UI线程。另外看看这里:

Android AsyncTask for Long Running Operations

建议将RoboSpice作为AsyncTask的开箱即用安全替代方案。