Я никогда не слышал о таких официальных инструментах в Android, которые упростили бы этот процесс.
Но я думаю, что вы можете указать, что другое приложение записывает звук. Попробуйте использовать для этого MediaRecorder в своем коде. Например, вы создадите его экземпляр с микрофоном (MediaRecorder.AudioSource.MIC) в качестве источника входного сигнала. В качестве индикатора того, что микрофон занят другим приложением, вы поймаете исключение, когда начнете запись (mRecorder.start()). Если вы не поймаете исключение, когда оборудование MIC можно использовать бесплатно. Так что никто не записывает звук сейчас. Идея состоит в том, что вы должны выполнять эту проверку каждый раз, когда ваше приложение выходит на передний план. Например, в обратном вызове жизненного цикла onResume() или onStart(). Например:
@Override
protected void onResume() {
super.onResume();
...
boolean isMicFree = true;
MediaRecorder recorder = new MediaRecorder();
recorder.setAudioSource(MediaRecorder.AudioSource.MIC);
recorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
recorder.setOutputFile("/dev/null");
recorder.setAudioEncoder(MediaRecorder.AudioEncoder.DEFAULT);
...
// Configure MediaRecorder
...
try {
recorder.start();
} catch (IllegalStateException e) {
Log.e("MediaRecorder", "start() failed: MIC is busy");
// Show alert dialogs to user.
// Ask him to stop audio record in other app.
// Stay in pause with your streaming because MIC is busy.
isMicFree = false;
}
if (isMicFree) {
Log.e("MediaRecorder", "start() successful: MIC is free");
// MIC is free.
// You can resume your streaming.
}
...
// Do not forget to stop and release MediaRecorder for future usage
recorder.stop();
recorder.release();
}
// onWindowFocusChanged will be executed
// every time when user taps on notifications
// while your app is in foreground.
@Override
public void onWindowFocusChanged(boolean hasFocus) {
super.onWindowFocusChanged(hasFocus);
// Here you should do the same check with MediaRecorder.
// And you can be sure that user does not
// start audio recording through notifications.
// Or user stops recording through notifications.
}
Ваш код не сможет запретить другим приложениям запись. Ваш блок try-catch просто укажет, что микрофон занят. И вы должны попросить пользователя прекратить это действие, потому что это запрещено. И не возобновляйте потоковое вещание, пока микрофон не освободится.
Пример использования MediaRecorder находится здесь.
Как видно из документов, MediaRecorder.start() выдает исключение, если:
Броски
IllegalStateException, если оно вызывается перед prepare() или когда камера уже используется другим приложением.
Я попробовал эту идею на своих образцах. Когда одно приложение получает MIC, другое не может работать с MIC.
Хочу повторить, что это всего лишь идея.
person
Sheikh
schedule
10.10.2017