2016-02-25 122 views
3

我一直在寻找几天,并没有找到合适的解决方案。如何检查麦克风是否被任何背景应用程序使用

我想检查是否有任何应用程序在后台使用麦克风,所以我的应用程序可以使用它,否则我只想显示消息“麦克风正在使用另一个应用程序”。

我试着检查所有的应用程序在后台和他们的权限,但这并不能解决我的问题,因为有包wearable.app要求的权限,但它不影响音频,或它没有使用它。

我尝试了其他的解决方案,我可以在这里或谷歌找到,但没有一个似乎是正确的方法。

所有我想检查,如果麦克风没有被使用,所以我的应用程序可以使用它。

任何建议,我将不胜感激。

回答

11

搜索更多后,我找到了解决方案,我将它添加到任何需要它来找到它更容易的人。

private boolean validateMicAvailability(){ 
    Boolean available = true; 
    AudioRecord recorder = 
      new AudioRecord(MediaRecorder.AudioSource.MIC, 44100, 
        AudioFormat.CHANNEL_IN_MONO, 
        AudioFormat.ENCODING_DEFAULT, 44100); 
    try{ 
     if(recorder.getRecordingState() != AudioRecord.RECORDSTATE_STOPPED){ 
      available = false; 

     } 

     recorder.startRecording(); 
     if(recorder.getRecordingState() != AudioRecord.RECORDSTATE_RECORDING){ 
      recorder.stop(); 
      available = false; 

     } 
     recorder.stop(); 
    } finally{ 
     recorder.release(); 
     recorder = null; 
    } 

    return available; 
} 
+0

真棒解决方法 – Qasim

+0

greate解决方法,但我想知道如果这也可以使用OpenSLES检测。 Atm我的OpenSLES音频回调没有被触发,以防麦克风不可用。 – user2479595

0

你可以反过来做。

在您的应用中获取麦克风。

获取已安装应用程序的列表,这些应用程序拥有RECORD权限。

然后检查这些应用程序中的一个是否在前台,以及是否有一个释放麦克风,以便其他应用程序可以使用它(例如发生电话呼叫时)。

有点肮脏的做法,但我认为这是你在找什么。

干杯!

+0

是的,但这并不能解决我的问题。 可以说有一个应用程序在我的开始之前在后台录制音频。用户启动我的应用程序,我不能从该应用程序中取出麦克风,除非他们已经实现了广播接收器来释放麦克风(我认为这很少)。所以,当我的应用程序尝试启动麦克风时,它会卡住或崩溃,因为它不能使用麦克风,因为其他应用程序已经使用它来录制音频。 –

+0

但是没有这样的应用程序。如果应用程序使用麦克风等硬件资源,并且不会释放其他应用程序来使用它,则手机甚至不会拨打电话。所以除非你想让麦克风全天候开放,否则你可以检查你想要捕捉的时间,如果其他应用程序正在使用它。如果它确实推迟了音频捕获时间。 –

+0

但这就是问题所在,我试图在我的应用中获取麦克风,但它并未从其他应用发布,因此我的应用被卡住或崩溃。 我相信它与系统进程完全不同,它们总是可以从后台运行的任何应用程序获取资源。所以除非我错过了一些东西,这不符合你所说的“把麦克风放到你的应用程序中”。我想要做的与shazam相同,当应用程序打开并且使用麦克风的背景中的另一个应用程序未发布时,它会给出消息“正在使用麦克风”。我正在尝试做同样的工作 –

相关问题