私は小さな調査を行い、Androidのソースを確認しました。実際、問題はファイル内のデフォルトの電話アプリケーションにありますpackages/apps/Phone/src/com/android/phone/PhoneUtils.java。関数は次のとおりです。
 /**
 * Internally used muting function.
 */
private static void setMuteInternal(Phone phone, boolean muted) {
    final PhoneGlobals app = PhoneGlobals.getInstance();
    Context context = phone.getContext();
    boolean routeToAudioManager =
        context.getResources().getBoolean(R.bool.send_mic_mute_to_AudioManager);
    if (routeToAudioManager) {
        AudioManager audioManager =
            (AudioManager) phone.getContext().getSystemService(Context.AUDIO_SERVICE);
        if (DBG) log("setMuteInternal: using setMicrophoneMute(" + muted + ")...");
        audioManager.setMicrophoneMute(muted);
    } else {
        if (DBG) log("setMuteInternal: using phone.setMute(" + muted + ")...");
        phone.setMute(muted);
    }
    app.notificationMgr.updateMuteNotification();
}
R.bool.send_mic_mute_to_AudioManagerミュートボタンをクリックすると、電話アプリケーションがインストールされているパラメーターをチェックすることがわかりますfalse(ソースをチェックインしました)。したがって、この場合、状態は電話であり、これは GSMPhone クラスのインスタンスです。このクラスは RIL ソケットと通信し、適切な要求を setMute に送信します ( RIL_REQUEST_SET_MUTE)。したがって、コマンドのパスのどこにも AudioManager の状態は更新されません。同様に、AudioManager がマイクの状態を変更したときに RIL に通知することはわかりません。
したがって、AudioManager にマイクの状態を問い合わせると、デフォルト値 (false) が返されます。この動作が予期されたものなのか、それともバグなのかはわかりません。android-platform グループで質問し、この質問とバグへのリンクを作成できます。