9

タブ付きフラグメント アクティビティ内にRecognitionListenerを実装します。ユーザーがスクロールすると、リスナーを実装するフラグメントが作成/破棄され、Nexus 7 と Galaxy Nexus で RegonitionListener に関連付けられたサウンドが聞こえるか、おそらくSpeechRecognizerが使用できるようになります。どのクラスが音の原因であるかに関係なく、ユーザーがそれを無効にできるようにしたいと思います。現在、私の問題は、私が解決しているユーザーの焦点なしで聞いていることです。ただし、デフォルトで音を聞きたくないし、ユーザーが通知音を選択できるようにすることを好みます。

私の質問はこれです、リスナーに関連付けられた通知音を無効にすることは可能ですか? ドキュメントでこれを見つけることができませんでした。

4

3 に答える 3

17

zapl が言ったように、それを行う直接的な方法はありませんが、システム ボリュームをミュートしてみてください。Tencent は、あらゆる種類のハッキングを回避していると述べています。それから、これを行う方法は今のところないと言わざるを得ませんが、それでも、同じ問題に苦しんでいて、「ハック」トリックを気にしない人のために、このトリックソリューションを共有しています. 欲求不満の時間を節約するだけです。

その特定の時間のシステム ボリュームをミュートし、その後ミュートを解除します。これを行う方法:

クラスで、次のオブジェクトを作成します

private AudioManager mAudioManager;
private int mStreamVolume = 0; 

onCreateメソッドで次の操作を行います。

mAudioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE);

音声認識の聞き取りを開始したら、次の操作を行います

speechRecognizer.startListening(intent); // this method make that annoying sound
mStreamVolume = mAudioManager.getStreamVolume(AudioManager.STREAM_MUSIC); // getting system volume into var for later un-muting 
mAudioManager.setStreamVolume(AudioManager.STREAM_MUSIC, 0, 0); // setting system volume to zero, muting

Speech RecognitionListenerインターフェイスには、メソッドonReadyForSpeechが必要です。

class MyRecognitionListener implements RecognitionListener          
{
  public void onReadyForSpeech(Bundle params)
  {
    // this methods called when Speech Recognition is ready
    // also this is the right time to un-mute system volume because the annoying sound played already
    mAudioManager.setStreamVolume(AudioManager.STREAM_MUSIC, mStreamVolume, 0); // again setting the system volume back to the original, un-mutting
  }
}

この煩わしい音でトリックをプレイする方法は次のとおりです。もちろん、他の音も一瞬ミュートされます。

于 2014-02-21T12:53:38.970 に答える
4

getStreamVolume前の回答は問題ありませんが、NullPointer Exception (が null オブジェクトで呼び出されている) が原因でクラッシュすることを除いては問題ありません。これを修正するには、getStreamVolume行の前に次を追加します。

AudioManager mAudioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE);

于 2015-03-09T10:11:10.553 に答える