来电期间的setRingerMode - RINGING

时间:2011-11-17 23:04:29

标签: android telephonymanager

我有一项任务 - 在电话响铃时立即更改铃声音量。例如: 检测到有来电后,我需要将铃声音量设置为0(静音),振动器也应该被禁用(如果没有禁用)。然后当我需要执行另一个代码(startComputing();)时会有延迟。之后应将振铃器音量调整到一定值(f.e.7)并激活振动器。这是我的代码:

    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);不会立即改变音量和振动,只是在大约半秒钟内。 先感谢您。 雅各布

1 个答案:

答案 0 :(得分:1)

我认为在你使铃声静音之前,你无法做任何事情来克服1/2秒的延迟。有时候它会起作用(即很短或没有延迟),有时你会在很短的时间内听到铃声。

我认为你遇到的问题是传递给setStreamVolume的标志。

试试这个:

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

您应该使用按位包含或|),而不是简单的添加+)。

相关问题