2012-11-07 16 views
10

Ich habe fast das gleiche Problem wie wo beschrieben here, Antwort in diesem Post hilft mir nicht, ich lasse meinen Equalizer sofort nach dem Einstellen der Bandstufen zu ihm. Es funktioniert perfekt auf meinem 4.0.4 Gerät, es funktioniert super auf 2.3.5 Gerät, es stürzt auf ein paar Prozent der Geräte ab und es spielt keine Rolle, welche Android-Version auf diesen Geräten läuft.Equalizer - Effektbibliothek nicht geladen

So gibt es Fehler auf

Equalizer mEqualizer = new Equalizer(0, mediaPlayer.getAudioSessionId());

java.lang.UnsupportedOperationException: Effect library not loaded 
     at android.media.audiofx.AudioEffect.<init>(AudioEffect.java:355) 
     at android.media.audiofx.Equalizer.<init>(Equalizer.java:149) 

Ich habe keine Ahnung, wie dieses Problem zu lösen, irgendwelche Vorschläge?

Antwort

0

Dies hängt von der Android-Version ab, die auf dem Gerät geladen ist.

Dieses Protokoll bedeutet, dass keine Bibliothek zum Implementieren der AudioEffect-Funktion vorhanden ist.

Ich fürchte, es keine Lösung dafür ist, dann lieber in Ihr Projekt eine dritte Partei Audio-Effekt-Bibliothek zu importieren

3

Vergewissern Sie sich, dass Sie das Gerät neu starten und es wieder mit der Veröffentlichung testen() nach dem Equalizer , es funktionierte für mich nach 2 Tagen der Suche nach Hinweisen.

0

Aus der Dokumentation müssen Sie release() auf einem Equalizer, MediaPlayer, Visualizer, etc. für einen eleganten Beenden aufrufen, oder Sie werden diesen Fehler beim Neustart der App sehen. Die einzige Abhilfe besteht dann darin, wie in diesem Thread zuvor erwähnt, neu zu starten.

Hier macht der Lebenszyklus der Android-Anwendung ein wenig schwierig, da die Apps nie beendet werden sollen (nur pausieren und fortsetzen), außer wenn das Betriebssystem aus Speichergründen oder Neustart benötigt wird. Ihre App onDestroy() -Methode wird in beiden Fällen aufgerufen.

Sie können die Version() in onDestroy() setzen, und das würde den Android-Lebenszyklus für bereitgestellte Anwendungen erfüllen. Ihre Benutzer würden diesen Fehler nicht sehen.

In der Entwicklung gibt es jedoch ein Problem: IDEs wie Eclipse (das ist eigentlich ein Framework für den Aufbau von IDEs, und nicht selbst eine IDE sein ...) wird den App-Prozess töten, anstatt es eine Zerstörung Nachricht senden. Dies verletzt den Lebenszyklus und release() wird nicht aufgerufen.

Aus diesem Grund sollten Sie auch niemals System.exit() aufrufen. Es verletzt genau so den Lebenszyklus auf Risiko ungeeigneter Exits.

Ihr Prozess wurde also nicht ordnungsgemäß beendet. Dies geschieht nur in der Entwicklung, nicht in der Bereitstellung. Eine Abhilfe besteht darin, das Gerätefenster in Eclipse nicht zum Stoppen von Prozessen zu verwenden. Es ist kein Halt, sondern ein Töten.

Eclipse tötet auch (Lebenszyklusverletzung) den Prozess nicht ordnungsgemäß, wenn Sie ein App-Projekt ausführen, während bereits eine Instanz ausgeführt wird.

Wie der Arzt sagte, wenn es weh tut, tun Sie es nicht: Verwenden Sie stattdessen den Debugger, der aktuelle Lifecycle-Nachrichten an die App sendet.