时间:2017-04-02 13:03:08

标签: android audio soundpool

我创建了一个带有许多声音按钮的应用程序,问题是一段时间后他们停止工作,我必须重置应用程序。有没有办法管理它?

public class TwoFragment extends Fragment{

SoundPool mySound1;
int ayyId;
SoundPool mySound2;
int eyyId;
SoundPool mySound3;
int keId;
SoundPool mySound4;
int kraId;
SoundPool mySound5;
int pandaId;
SoundPool mySound6;
int timeId;

@Override
public void onActivityCreated(Bundle savedInstanceState) {
    super.onActivityCreated(savedInstanceState);
    mySound1 = new SoundPool(1, AudioManager.STREAM_MUSIC, 0);
    ayyId = mySound1.load(getActivity().getApplicationContext(), R.raw.ayy, 1);
    mySound2 = new SoundPool(1, AudioManager.STREAM_MUSIC, 0);
    eyyId = mySound2.load(getActivity().getApplicationContext(), R.raw.eyy, 1);
    mySound3 = new SoundPool(1, AudioManager.STREAM_MUSIC, 0);
    keId = mySound3.load(getActivity().getApplicationContext(), R.raw.kee, 1);
    mySound4 = new SoundPool(1, AudioManager.STREAM_MUSIC, 0);
    kraId = mySound4.load(getActivity().getApplicationContext(), R.raw.kraaa, 1);
    mySound5 = new SoundPool(1, AudioManager.STREAM_MUSIC, 0);
    pandaId = mySound5.load(getActivity().getApplicationContext(), R.raw.pandaa, 1);
    mySound6 = new SoundPool(1, AudioManager.STREAM_MUSIC, 0);
    timeId = mySound6.load(getActivity().getApplicationContext(), R.raw.time, 1);
        }
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.fragment_two,container,false);
    View v = inflater.inflate(R.layout.fragment_two,container,false);
    Button des1 = (Button) view.findViewById(R.id.des1);
    Button des2 = (Button) view.findViewById(R.id.des2);
    Button des3 = (Button) view.findViewById(R.id.des3);
    Button des4 = (Button) view.findViewById(R.id.des4);
    Button des5 = (Button) view.findViewById(R.id.des5);
    Button des6 = (Button) view.findViewById(R.id.des6);
    des1.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {mySound1.play(ayyId, 1, 1, 1, 0, 1);}
    });
    des2.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {mySound2.play(eyyId, 1, 1, 1, 0, 1);}
    });
    des3.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {mySound3.play(keId, 1, 1, 1, 0, 1);}
    });
    des4.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {mySound4.play(kraId, 1, 1, 1, 0, 1);}
    });
    des5.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {mySound5.play(pandaId, 1, 1, 1, 0, 1);}
    });
    des6.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {mySound6.play(timeId, 1, 1, 1, 0, 1);}
    });

    MobileAds.initialize(getActivity(), "ca-app-pub-xxxxxxxxxxxxxxxxxxxx~xxxxxxxx");
    AdView mAdView = (AdView) view.findViewById(R.id.adView);
    AdRequest adRequest = new AdRequest.Builder().build();
    mAdView.loadAd(adRequest);

    return view;

}
}

我也想问一下当我点击另一个按钮时如何停止播放按钮。谢谢

1 个答案:

答案 0 :(得分:0)

我建议使用.release()。根据文件:

  

释放SoundPool资源。释放SoundPool对象使用的所有内存和本机资源。无法再使用SoundPool,应将引用设置为null。

此外,您可以将播放节目保持在arraylist中,然后在单击播放按钮时清除并播放。

    List<Integer> streams = new ArrayList<Integer>();
SoundPool pool = new SoundPool(10, AudioManager.STREAM_MUSIC, 0);

public void onClick(View view) {
    int streamId = 0;
    stop_clear_stream();
    switch (view.getId()) {
        case R.id.button1:
            streamId = pool.play(soundid1, 1.0f, 1.0f, 1, 0, 1.0f);
            break;
        case R.id.button2:
            streamId = pool.play(soundid2, 1.0f, 1.0f, 1, 0, 1.0f);
            break;
        .
        .
        .
        .
        .

        streams.add(streamId);

    }
}

private void stop_clear_stream() {
    if (streams != null && streams.size() > 0)
        for (Integer stream : streams)
            pool.stop(stream);

    streams.clear();
}

我还没有测试过上面的代码。