0

メインのアクティビティの OnCreate メソッドからタスクを別のクラスにオフロードして、重労働を行うのに問題があります。

非アクティビティ クラスから getSystemService を呼び出そうとすると、例外がスローされます。

どんな助けでも大歓迎です:)

public void playSound() {
    SoundPool soundPool;
    int soundID;
    final boolean loaded = false;

    soundPool = new SoundPool(10, AudioManager.STREAM_MUSIC, 0);
    soundPool.setOnLoadCompleteListener(new OnLoadCompleteListener() {
        public void onLoadComplete(SoundPool soundPool, int sampleId,
                int status) {
            loaded = true;
        }
    });
    soundID = soundPool.load(getContext(), R.raw.voice, 1);
    AudioManager audioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
    float actualVolume = (float) audioManager
            .getStreamVolume(AudioManager.STREAM_MUSIC);
    float maxVolume = (float) audioManager
            .getStreamMaxVolume(AudioManager.STREAM_MUSIC);
    float volume = actualVolume / maxVolume;
    // Is the sound loaded already?
    if (loaded) {
        soundPool.play(soundID, volume, volume, 1, 0, 1f);
        Log.e("Test", "Played sound");
    }
}
4

1 に答える 1

1

以下を試してください。

    public void playSound() {
SoundPool soundPool;
int soundID;
final boolean loaded = false;

soundPool = new SoundPool(10, AudioManager.STREAM_MUSIC, 0);
soundPool.setOnLoadCompleteListener(new OnLoadCompleteListener() {
    public void onLoadComplete(SoundPool soundPool, int sampleId,
            int status) {
        loaded = true;
    }
});
soundID = soundPool.load(getContext(), R.raw.voice, 1);
AudioManager audioManager = (AudioManager) getContext().getSystemService(Context.AUDIO_SERVICE);
float actualVolume = (float) audioManager
        .getStreamVolume(AudioManager.STREAM_MUSIC);
float maxVolume = (float) audioManager
        .getStreamMaxVolume(AudioManager.STREAM_MUSIC);
float volume = actualVolume / maxVolume;
// Is the sound loaded already?
if (loaded) {
    soundPool.play(soundID, volume, volume, 1, 0, 1f);
    Log.e("Test", "Played sound");
}

}

于 2013-06-14T13:11:03.930 に答える