android - 来电期间的 setRingerMode - RINGING

标签 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); 振铃器根本不响,只出现声级改变但电话不播放任何声音的 toast 消息。这怎么能改变? 2)还有问题 amanager.setRingerMode(0x00000000);不会立即改变音量和振动,但会在大约半秒内改变。 先感谢您。 雅各布

最佳答案

我认为在将铃声静音之前,您无法克服 1/2 秒的延迟。有时它有效(即非常短或没有延迟),有时您会听到短时间的铃声。

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

试试这个:

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

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

关于android - 来电期间的 setRingerMode - RINGING,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8175650/

相关文章:

android - 手机休眠时听信号强度

android - 使用 telephonyserivce.endcall() 在 android 中结束通话

android - Android 中 ShapeDrawable 的恼人行为

android - 单击 Spinner 项目后,SeekBar 更改主题

Android如何根据第一个标签输入更新第二个标签?

java - 如何从 API 级别 16 的双卡手机 Android 获取运营商名称?

android - OAuth 1.0 与 Android 4.x 和抄写员

android - 使用自定义类启动浏览器 Intent - 找不到 Activity

java - 无需 READ_PHONE_STATE 权限即可使用 TelephonyManager

java - 创建接听电话通知