着信中、ユーザーは電話の呼び出し音をサイレントにすることができますが、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
ユーザーが音量ボタンまたは電源ボタンを押すと、ログに上記の値が記録されます。