2

着信中、ユーザーは電話の呼び出し音をサイレントにすることができますが、Android Phone の音量を上げるか電源ボタンを押します。アプリで発信者の名前を話す発信者名アプリを作成しています。現在の着信音をミュートしていません。私のアプリでは、着信中に電話が鳴っていて、ユーザーが音量ボタンまたは電源ボタンを押してサイレントにした場合を除いて、すべて正常に動作しています。このトリガーを処理できません。AudioManager と RingToneManager クラスを試しましたが、無駄でした。私のアプリには、1 つのアクティビティ (アプリ設定)、1 つのブロードキャスト レシーバー クラス (着信通話をキャプチャするため)、および 1 つのサービス (TTS エンジンをトリガーするため) があります。

コード :

    private void SpeakCallerName(String txtSpeak) {

    Runnable runnable = new Runnable() {

        @Override
        public void run() {
            Ringtone ringtone = null;
            _status = "SpeakService speak Runnable phoneRinging: " + phoneRinging;

             Log.i("Test", _status);
             int i =0;


            try {
            while(phoneRinging) {
                AudioManager audioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
                 _status = "SpeakService speak Runnable inside while loop count: "+i + "phoneRinging:" + phoneRinging;                   
                 Log.i("Test", _status);
                 int Mode = audioManager.getMode();

                 _status = "SpeakService speak Runnable inside while loop count: "+i + ":audioManager.getMode():" + Mode;                    
                 Log.i("Test", _status);

                 int ringerMode=audioManager.getRingerMode();
                 _status = "SpeakService speak Runnable inside while loop count: "+i + ":audioManager.getRingerMode():" + ringerMode;                    
                 Log.i("Test", _status);

                 int StreamVolume=audioManager.getStreamVolume(AudioManager.STREAM_RING);
                 _status = "SpeakService speak Runnable inside while loop count: "+i + ":audioManager.getStreamVolume:" + StreamVolume;                  
                 Log.i("Test", _status);




            myTts.speak(_txtSpeak,TextToSpeech.QUEUE_FLUSH,null);


                Thread.sleep(5000);

                _status = "SpeakService speak Runnable count: "+i + " slept for 8 sec";

                 Log.i("Test", _status);
                 i+=1; 
            }
            }
            catch (InterruptedException e) {

                e.printStackTrace();
            }
            catch (Exception e) {

                _status = "SpeakService speak Runnable count: "+i + " EXCEPTION: " + e.getMessage();

                 Log.i("Test", _status);
            }



        }

     };

     Thread mythread = new Thread(runnable);
        mythread.start();
}

私のログは次のようなものです:

SpeakService speak Runnable inside while ループ回数: 1phoneRinging:true SpeakService speak Runnable inside while ループ回数: 1:audioManager.getMode():1 SpeakService speak Runnable while loop count: 1:audioManager.getRingerMode():2ループ回数: 1:audioManager.getStreamVolume:7

ユーザーが音量ボタンまたは電源ボタンを押すと、ログに上記の値が記録されます。

4

1 に答える 1

0

着信音の音量や音楽/メディアの音量など、さまざまなチャンネルの音量を活用できます。あなたの場合、着信音の音量は明らかであり、着信音自体が無音になると無音になるはずです。音楽の音量は、最後に再生された音楽の音量になりますが、着信があるととにかく静かになります。独自のチャネルを作成して制御する方法は見たことがありません。

あなたが使用する場合、SoundPool私はそれを設定するためにこの行に行きます:

SoundPool soundPool = new SoundPool(1, AudioManager.STREAM_RING, 0);

まあ、それが理論的にどのように機能するかです。サウンドプールの音量を制御した経験はありますが、着信通話とは連動していません。ですから、試してみるのが一番です。

于 2013-10-31T15:03:14.517 に答える