2014-09-05 17 views
10

Ich habe einen Audio-Aufnahme-Service in meiner App, die den Ton kontinuierlich aufzeichnen wird. Es belegt also immer den AudioRecord. Das bedeutet, dass keine andere App den Audiorecorder verwenden kann, da dieser bereits vom Dienst belegt ist. Gibt es eine Möglichkeit zu benachrichtigen, dass andere App für Audio-Recorder anfordert (so dass ich es freigeben kann) und auch wenn die App es freigibt (damit ich es wieder dem Dienst zuweisen kann)?Freigabe von AudioRecord android, wenn andere App Anfrage für die Aufnahme

+0

Ich denke, das ist kein gewöhnliches Senario, also denke ich, dass es keinen Weg gibt, das zu erreichen. – rekire

+0

@rekire Die Anruffunktion des Geräts nimmt das Mikrofon automatisch an, auch wenn der Dienst läuft. Also, ich denke, es muss einen Weg geben. – berserk

+0

Ich denke, dass niedrigere native APIs verwendet werden, die für keine Apps verfügbar sind. – rekire

Antwort

1

Vielleicht ist ein möglicher Weg, eine BroadcastReceiver zu erstellen, die ein Ereignis von der App erhält, die die Kontrolle über die Mikrofonquelle anfordert. Die Methode onReceive() sollte mit dem Dienst interagieren und die Ressource freigeben. Wenn die andere App fertig ist, kann sie den Prozess wiederherstellen, um den Dienst erneut zu starten. Wenn Sie nicht die Kontrolle über das Verhalten der anfordernden App bekommen können, denke ich, dass es ein etwas anderes Problem gibt. Anyway:

Das Problem ist alles über wissen, wann die Ressource angefordert wird, kann dies durch AudioManager Absichtstypen erfolgen. Achten Sie darauf, zu überprüfen, Managing audio focus, die über Audio Fokus Verlust auf TRANSIENT Weise spricht!

+0

Danke für die Antwort! Ich werde es versuchen :) – berserk

+0

Ich lese AudioManager-Klasse, aber es gibt keine Broadcasts für Mic-Verfügbarkeit. Es gibt stattdessen einige Flags, von denen ich glaube, dass sie in meinem Fall nicht verwendet werden können. – berserk

1

Wie @Rekire erwähnt, gibt es möglicherweise keine Möglichkeit, dies zu erreichen. AudioManager bietet auch keine solchen Broadcasts, so dass es nicht für verschiedene Apps möglich ist. Vielleicht ist das Rooten des Geräts die einzige Option.

+0

Hmm .. denke ich habe keine andere Wahl! – berserk

+0

Wie funktioniert "Auto-Shazam" dann? – HaydenKai

0

Dies kann mit AudioManager.OnAudioFocusChangeListener Rückruf durchgeführt werden. Beenden Sie einfach die Aufzeichnung beim AUDIOFOCUS_LOSS_TRANSIENT-Ereignis und beginnen Sie erneut beim AUDIOFOCUS_GAIN-Ereignis. Diese Lösung eignet sich gut für die Google Sprachsuche (Google-Such-Widget, Google Chrome usw.).

Aber leider funktioniert es schlecht für andere gewöhnliche Anwendungen (zum Beispiel HTC M7 Voice Recorder App ist nicht in der Lage, die Aufnahme beim ersten Klick auf "Aufnahme" -Taste, zweiter Klick den Trick zu starten - es scheint, dass App sollte erneut versuchen Aufzeichnung bei Ausfall mehrmals).

+0

Danke, wird überprüft. – berserk