【问题标题】:How to adjust SoundPool sound volume on the go?如何在旅途中调整 SoundPool 音量?
【发布时间】:2013-08-16 03:06:39
【问题描述】:

我正在尝试创建将连续播放两个短声音的 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;
    }
}

【问题讨论】:

    标签: android android-asynctask soundpool


    【解决方案1】:

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

    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 不是为长时间运行的操作而设计的,因为它们很容易被系统杀死以检索内存。如果它持有对不再使用的活动的引用,可能会导致内存泄漏。

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

    Android AsyncTask for Long Running Operations

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-31
      • 2011-04-18
      • 1970-01-01
      • 2011-05-10
      • 1970-01-01
      • 2019-10-01
      相关资源
      最近更新 更多