2012-04-05 10 views
0

Ich habe eine Aktivität, die einen Vordergrund Service starten. Der Dienst startet eine Klasse (recwav), die Stimme von Mikrofon aufnehmen. Von der Aktivität muss ich auf die Recwav-Klasse tonget maxamplitude des Audio-Datensatzes zugreifen.Wie mit einem Dienst in Android

Was ist der richtige Weg?

Mit Messenger-Objekt oder Brodcast? Danke

+1

Gibt es einen Grund Stimme speziell in einem Dienst aufnehmen? Ein Dienst ist kein Thread, erinnern Sie sich. Verwenden Sie für nicht blockierende Hintergrundverarbeitung stattdessen einen Thread (oder AsyncTask). –

+0

Seva, der Grund ist, um sicherzustellen, dass die Aufnahme nicht von Android gestoppt wird, so dass der Vordergrund-Service die kontinuierliche Aufnahme für lange Zeit garantieren muss. – Giuseppe

Antwort

1

Das klingt wie ein Beispiel für einen lokalen Dienst. Sie können Ihre Aktivität in den Dienst und Ihre Aktivitätsklasse binden wird dann in der Lage sein, alle öffentlichen Methoden aufrufen, die Sie auf diesem Service-Klasse aussetzen:

Eine der häufigsten Anwendungen eines Dienstes als Nebenkomponente ist läuft neben anderen Teilen einer Anwendung, in dem gleichen Prozess wie der Rest der Komponenten. Alle Komponenten einer .apk laufen im selben Prozess, wenn nicht explizit anders angegeben, also ist dies eine typische Situation.

Wenn auf diese Weise verwendet, indem die Komponenten in den gleichen Verfahren sind unter der Annahme, können Sie die Interaktion zwischen ihnen erheblich vereinfachen: Kunden des Dienstes kann einfach die IBinder werfen sie aus es auf eine konkrete Klasse erhalten veröffentlicht durch den Service.

http://developer.android.com/reference/android/app/Service.html#LocalServiceSample

+0

twaddington, das lokale Service-Beispiel, das Sie vorschlagen, sagen Sie nicht, dass Sie öffentliche Methoden aufrufen können, aber Sie können msg senden und Rückruf erhalten, bin ich falsch? – Giuseppe

+0

Das ist falsch. Wenn Sie das Beispiel des LocalService-Binders verwenden, erhalten Sie eine Instanz des Dienstes, auf den Sie Methoden direkt wie jedes normale Objekt aufrufen können. – twaddington