2011-11-17 31 views
1

我有一個任務 - 當電話振鈴時立即更改鈴聲音量。例如: 檢測到有來電後,我需要將鈴聲音量設置爲0(靜音),同時應禁用振動器(如果它尚未禁用)。那麼當我需要執行另一個代碼(startComputing();)時會有延遲。之後,振鈴音量應更改爲特定值(f.e.7),並且應激活振動器。這是我的代碼:setRingerMode來電過程中 - RINGING

public class IncomingCallReceiver extends BroadcastReceiver { 
     private AudioManager amanager; 
     public void onReceive(Context context, Intent intent) { 
      if(intent.getStringExtra(TelephonyManager.EXTRA_STATE).equals(TelephonyManager.EXTRA_STATE_RINGING)) { 
       amanager = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE); 
       amanager.setRingerMode(0x00000000); // no sound and no vibration    
       startComputing(); 
       amanager.setRingerMode(0x00000002); // normal 
       amanager.setStreamVolume(AudioManager.STREAM_RING, 7, 
         AudioManager.FLAG_SHOW_UI 
           + AudioManager.FLAG_PLAY_SOUND); 
      } 

     } 
     private void startComputing() { 
      try { 
      Thread.sleep(3000); 
     } catch (InterruptedException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     }  
     } 

} 

1)的主要問題是,經過這樣的:amanager.setStreamVolume(AudioManager.STREAM_RING,7,AudioManager.FLAG_SHOW_UI + AudioManager.FLAG_PLAY_SOUND); 鈴聲根本不響,只有吐司消息出現,聲音級別改變,但手機不播放任何聲音。這可以如何改變? 2)也有問題,amanager.setRingerMode(0x00000000);不會立即改變體積和振動,而只會在大約半秒內改變。 預先感謝您。 Jacob

+0

任何解決方案? – Rizon

回答

1

我不認爲在靜音鈴聲之前,您可以做任何事情來克服1/2秒的延遲。有時它有效(即很短或不延遲),有時你會在短時間內聽到鈴聲。

我認爲你遇到的問題是傳遞給setStreamVolume的標誌。

試試這個:

amanager.setStreamVolume(AudioManager.STREAM_RING, 7, 
    AudioManager.FLAG_SHOW_UI|AudioManager.FLAG_PLAY_SOUND); 

你應該使用按位或|),而不是簡單的此外+)。