如何在 android 中检查麦克风是否打开?

how to check if mic is turned on or not in android?

我正在尝试开发 phone 通话记录,这意味着用户在我的应用程序的 phone 通话上花费了多少时间。我知道呼叫的传入和传出广播。但对于拨出电话,有可能对方不会接听或网络无法接通。我在网上阅读了一些解决方案,但我认为当有人接听电话时,麦克风应该在那个时候打开。所以如果我能以某种方式听到麦克风打开的广播。我的程序应该是完整的,我尝试了但什么也没找到,如果有人知道请帮助。

提前谢谢你。

我认为一旦你使用 Telephony 服务开始通话,无论对方是否接听你的电话,麦克风都会打开,但如果你真的想要,你可以像这样使用 AudioManager 服务。

AudioManager audioManager = (AudioManager) getSystemService(context);

// This is to get the active mode of the AudioManager
int mode = audioManager.getMode();

// use AudioManager.MODE_IN_CALL for audio call
// use AudioManager.MODE_IN_COMMUNICATION for audio/video chat or VOIP 

if (AudioManager.MODE_IN_CALL == mode) {
   // Enters here during active call.
}

这是完整的方法。

    public void listener(){
        final AudioManager audioManager = (AudioManager) getSystemService(AUDIO_SERVICE);

        new Thread(new Runnable() {
            @Override
            public void run() {
                while(true){
                    // This is to get the active mode of the AudioManager
                    int mode = audioManager.getMode();

                    // use AudioManager.MODE_IN_CALL for audio call
                    // use AudioManager.MODE_IN_COMMUNICATION for audio/video chat or VOIP

                    if (AudioManager.MODE_IN_COMMUNICATION == mode) {
                        // Enters here during active internet call.
                        Log.e(TAG, "In Internet Call (VOIP)");
                    }else if (AudioManager.MODE_IN_CALL == mode) {
                        // Enters here during active call.
                        Log.e(TAG, "In Normal Call");
                    }

                    try {
                       Thread.sleep(1000);
                    } catch (InterruptedException e) {
                       e.printStackTrace();
                    }
                }
            }
        }).start();
    }

现在只需在 Class.

中调用 listener() 方法

了解更多信息 Here on the developer documentation