Autore Topic: Gestione SoundPool su Activity diversa  (Letto 445 volte)

Offline Grifith

  • Utente junior
  • **
  • Post: 56
  • Respect: +1
    • Mostra profilo
    • La mia prima applicazione...
Gestione SoundPool su Activity diversa
« il: 28 Novembre 2011, 12:03:59 CET »
0
Buongiorno.

Ho un problema relativo all'utilizzo di soundPool in diverse Activity. Mi spiego meglio. Ho una Activity (X1) principale che fa da "schermata di introduzione" verso un'altra molto generica (X2).
La mia activity X1 contiene al suo interno un Thread che ogni 30 sec invia informazioni ad un server. Qualora non ci sia connessione, mi viene inviato un messaggio da un Toast e avviato un allarme sonoro. Se mi trovo nella schermata X1 non ho alcun problema.

Ma se mi trovo nella schermata X2 riesco a vedere il messaggio senza alcun problema, ma il sonoro non mi viene avviato.

Entrambe le classi hanno inizializzato una classe Effect che serve a semplificarmi la creazione del SoundPool
Codice (Java): [Seleziona]
public class Effect {
        /**
         * CONSTANTS :
         * PRIORITY : the priority of the sound. Currently has no
         * effect. Use a value of 1 for future compatibility. (Google doc.)
         * MAX_STREAMS : the maximum number of simultaneous streams for this
         * SoundPool object (Google doc.)
         * STREAM_TYPE : the audio stream type as described in AudioManager.
         * For example, game applications will normally use STREAM_MUSIC. (Google doc.)
         *  
         */

        private static final int PRIORITY = 1;
        private static final int MAX_STREAMS = 2;
        private static final int STREAM_TYPE = AudioManager.STREAM_ALARM;

        private SoundPool sound;
        private AudioManager am;
        private float volume;
        private int soundID;

        /**
         * Constructs a Effect object with the following characteristics:
         *
         * @param context
         *            The context of the application
         * @param resId
         *            The resource id of sound effect, like
         *            R.raw.music_effect_example
         */

        public Effect(Context context, int resId) {
                am = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE);
                volume = am.getStreamVolume(STREAM_TYPE);
                sound = new SoundPool(MAX_STREAMS, STREAM_TYPE, 0);
                soundID = sound.load(context, resId, PRIORITY);
        }

        /**
         * Play the sound
         */

        public void play() {
                sound.play(soundID, volume, volume, PRIORITY, 0, 1f);
        }
        /**
         * Release the SoundPool resources. Release all memory and native resources used by the SoundPool object.
         * The SoundPool can no longer be used and the reference should be set to null. (Google doc.)
         */

        public void release() {
                sound.release();
        }
       
       
       
}

La classe X1 ha inizializzato il sonoro nella sua activity:
Codice (Java): [Seleziona]
alertEffect = new Effect(this, R.raw.alert);Identica inizializzazione per la classe X2.
Il sonoro dovrebbe partire in una classe Handler interna ad X1:
Codice (Java): [Seleziona]
bundle = msg.getData();
if(!bundle.containsKey("code")){
        alertEffect.play();
        Toast.makeText(getBaseContext(), "No Signal", Toast.LENGTH_LONG).show();
}
Ma ciò accade soltanto se X1 è "visibile". Mentre, non accade se X2 risulta essere attiva.

Avete qualche idea sul perchè e su come risolverlo?
Grazie mille.