2013-10-31 3 views
2

전화 수신 중에는 휴대 전화의 벨소리를 들리지 않게 설정할 수 있지만 Android 폰에서는 소리를 낮추거나 켭니다. 내 앱에서 발신자 이름을 말할 수있는 발신자 이름 앱을 만들고 있습니다. 현재 벨소리를 음소거하고 있지 않습니다. 전화가 걸려 오는 동안 전화벨이 울리고 사용자가 볼륨이나 전원 버튼을 눌러 말을하지 않으면 내 응용 프로그램에서 모든 것이 잘 작동합니다. 이 방아쇠를 처리 할 수 ​​없습니다. AudioManager 및 RingToneManager 클래스를 시도했지만 헛된. 내 앱에는 하나의 활동 (앱 설정), 하나의 BroadCast 수신자 클래스 (수신 전화 캡처 용) 및 하나의 서비스 (TTS 엔진 트리거 용)가 있습니다.Android의 수신 전화도 벨소리 모드가 변경되었습니다. 문자 메시지 - 음성 응용 프로그램이 필요합니다.

코드 :

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(); 
} 

내 로그는 다음과 같이이다 : 1phoneRinging :

SpeakService는 Runnable를 내부에있는 동안 루프 카운트를 말하는 1 : 사실 SpeakService는 Runnable를 내부에있는 동안 루프 카운트를 말할 audioManager.getMode() : 1 SpeakService는 루프 카운트 중에 runnable을 말합니다. 1 : audioManager.getRingerMode() : 2 루프 카운트 중에 SpeakService가 Runnable을 말합니다 : 1 : audioManager.getStreamVolume : 7

사용자가 볼륨이나 전원 버튼을 누르면 여전히 로그에 위의 값이 표시됩니다.

+0

한 가지를 분명히 해 주시겠습니까? 앱에서 사용자가 말한 내용 (주로 연락처 이름)을 녹음하고 수신 전화 (특히 수신 전화)의 벨소리 볼륨을 제어하려고 시도합니다. 사용자 기록) 왜 그 볼륨을 제어하고 싶습니까? 내가 이해하는 바로는이 두 가지 사이에는 아무 관계도 없습니다. – jboi

+0

아무 것도 녹음하지 않으려 고합니다. 내 응용 프로그램은 전화가 울리면 발신자 이름을 말합니다. 내 문제는 수신되는 모든 것을 수신하는 경우이며 전화의 볼륨 또는 전원 버튼을 누르면 벨소리가 무음으로 들어 오지만 수신 전화가 계속됩니다. 사용자가 볼륨 또는 전원 버튼을 누르면 수신음이 울리는 동안 팅톤이 조용 해지고 내 앱이 발신자 이름을 말하지 않게하려면이 특정 상황을 처리하고 싶습니다. 희망이 당신의 의심을 설명합니다. –

답변

0

벨소리 볼륨 또는 음악/미디어 볼륨과 같은 다른 채널의 볼륨을 활용할 수 있습니다. 벨소리 볼륨은 귀하의 경우에 분명하며 벨소리 자체가 침묵으로 침묵해야합니다. 음악 볼륨은 마지막으로 재생 한 음악의 볼륨을 가지지 만 어쨌든 모든 수신 전화로는 아무 소리도 나지 않습니다. 자신의 채널을 만들고 제어하는 ​​방법을 보지 못했습니다. 당신이 SoundPool를 사용하는 경우

나는 그것을 설정하려면이 줄을 갈 것 :

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

글쎄, 모든 것이 이론적으로 작동하는 방법입니다. 사운드 풀의 볼륨을 제어하는 ​​데 경험이 있지만 인코밍 호출과 관련되어 있지 않습니다. 그래서 최선을 다해 시도해보십시오.

+0

내 문제에 대해 더 많은 아이디어를 줄 수있는 코드를 추가했습니다. 정상적으로 작동하는 TexttoSpeech 엔진을 사용하고 있습니다. 나는 incominng 통화 사용자의 울리는 동안 볼륨 또는 전원 버튼 (실제로 침묵에 울리는 박았)을 호출자 이름을 말하는 것을 중지 TTS를 원한다. –