2014-09-05 2 views
10

내 앱에 오디오 녹음 서비스가있어 소리가 계속 녹음됩니다. 따라서 항상 AudioRecord를 차지합니다. 오디오 레코더가 이미 서비스에서 사용 중이므로 다른 앱에서 오디오 레코더를 사용할 수 없음을 의미합니다. 다른 앱에서 오디오 레코더를 요청하고 있다는 알림을 보낼 수 있습니까? (앱을 출시 할 수 있도록) 앱에서 앱을 출시 할 때 (서비스에 다시 할당 할 수 있도록)다른 앱이 녹음을 요청할 때 AudioRecord android를 출시하십시오.

+0

나는 그것이 일반적인 senario는 아니라고 생각한다. 그래서 그것을 달성 할 방법이 없다고 생각한다. – rekire

+0

@rekire 장치의 호출 기능은 서비스가 실행중인 경우에도 자동으로 마이크를 가져옵니다. 그래서 나는 어떤 방법이 있어야한다고 생각합니다. – berserk

+0

나는 모든 애플 리케이션을 위해 aviable 아니 낮은 기본 API를 사용하는 것 같아요. – rekire

답변

1

아마도 마이크 소스에 대한 제어를 요청하는 앱에서 이벤트를 수신하는 BroadcastReceiver을 만들 수 있습니다. onReceive() 메서드는 서비스와 상호 작용하고 리소스를 해제해야합니다. 다른 앱이 끝나면 서비스를 다시 시작하기 위해 프로세스를 되돌릴 수 있습니다. 요청한 앱의 동작을 제어 할 수 없다면 약간 다른 문제가 있다고 생각합니다. 어쨌든 :

문제는 자원 요청 시점을 모두 알고있는 것입니다. 이는 AudioManager 인 텐트 유형을 통해 수행 할 수 있습니다. TRANSIENT 방식으로 오디오 포커스 손실에 대해 이야기하는 Managing audio focus을 확인하십시오!

+0

답변 해 주셔서 감사합니다! 나는 그것을 시도해 볼 것이다 : – berserk

+0

AudioManager 클래스를 읽었지 만, 마이크 사용 가능 여부에 대한 방송이 없다. 대신에 일부 플래그가 있는데, 제 경우에는 사용할 수 없다고 생각합니다. – berserk

1

@Rekire가 언급했듯이이를 달성 할 방법이 없을 수 있습니다. 또한 AudioManager는 그러한 브로드 캐스트를 제공하지 않으므로 다른 응용 프로그램에서는 불가능합니다. 어쩌면 장치를 응원하는 것만이 유일한 선택입니다.

+0

흠 .. 나는 다른 선택의 여지가 없다고 생각해! – berserk

+0

"자동 Shazam"은 어떻게 작동합니까? – HaydenKai

0

AudioManager.OnAudioFocusChangeListener 콜백으로 수행 할 수 있습니다. AUDIOFOCUS_LOSS_TRANSIENT 이벤트에서 녹음을 중지하고 AUDIOFOCUS_GAIN 이벤트에서 다시 시작하십시오. 이 솔루션은 Google 음성 검색 (Google 검색 위젯, Google 크롬 등)에 적합합니다.

하지만 불행히도 다른 일반 응용 프로그램에서는 제대로 작동하지 않습니다 (예 : HTC M7 음성 녹음기 앱은 "녹음"버튼을 처음 클릭 할 때 녹음을 시작할 수 없습니다. 두 번째로 클릭하십시오). 다시 시도 할 준비가되어야합니다. 몇 번 실패 기록).

+0

감사합니다. 확인할 것입니다. – berserk

관련 문제