4

タイトルにあるAudioManager.isMicrophoneMute()ように、何があっても常にfalseを返します。

セットアップ:

これに関連する可能性のある古いバグのため、マニフェストにはこの権限が含まれています。古いバグは、ヘッドホンが使用されているかどうかを確認することでした。助けにはなりませんが、害もありません。

<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />

  1. telnetからエミュレータへの呼び出しを開始します。
  2. 電話を取る
  3. アプリを確認してください-ステータスaudioManager.getMode() == audioManager.MODE_IN_CALLtrueです。わかりました、私たちは元気です
  4. ステータスチェックaudioManager.isMicrophoneMute()false-わかりました、まだ問題ありません
  5. 電話に戻り、ミュートボタンを押します
  6. アプリに切り替えて確認audioManager.isMicrophoneMute()してください。それでも false問題はありません。真実である必要があります。

それで、これは壊れたAPIですか?または、他の権限が必要ですか?または、これはエミュレーターでは機能しませんか?

ありがとうございました。

4

2 に答える 2

5

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

于 2013-02-08T16:03:41.747 に答える
0

これは 5.x Lollipop で機能するようになりました。4.x ではまだ動作しません。たぶん、Googleは古いOS用に修正しないでしょう。

于 2015-03-25T15:46:36.700 に答える