6

android AudioManagerを使用してSTREAM_SYSTEMやSTREAM_NOTIFICATIONなどのストリームをミュートおよびミュート解除しています。ミュートは、setStreamMuteを呼び出すのは簡単ですが、isStreamMutedメソッドが見つかりません。

ソースコードの内部を見ると、それが存在することがわかります。問題は、「ストリームがミュートされているかどうかをどのように確認できるか」です。

私はAndroid4.0.4に取り組んでいます

4

3 に答える 3

8

反射はあなたの友達です。これは私にとってはうまくいきました。

try {
    Method m = AudioManager.class.getMethod("isStreamMute", int.class);
    isMuted = (Boolean) m.invoke(am, AudioManager.STREAM_MUSIC);
} catch (NoSuchMethodException | InvocationTargetException | IllegalAccessException e) {
    System.out.println(e);
}

更新: メソッドpublic boolean isStreamMute (int streamType)は、リフレクションを使用せずに API 23 でアクセスできるようになりました。

于 2014-06-14T17:53:05.510 に答える
7

不快な答えは、ストリーム ミュートがプロセス単位で動作することです。したがって、ミュート状態を静的変数に安全に保存し、適切にラップして、ミュート状態を自分で追跡できます。苦い経験から言えば。しなければならないことをすることもあります。なぜ彼らはそれをしたのですか?それはもっと難しい質問です....

于 2012-12-09T18:59:25.093 に答える
1

hide を使用して、android.jar からメソッドを取り除きました。

/**
 * get stream mute state.
 *
 * @hide
 */
public boolean isStreamMute(int streamType) {
于 2014-04-23T17:43:21.240 に答える