私は小さな調査を行い、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 グループで質問し、この質問とバグへのリンクを作成できます。