我有一项任务 - 在电话响铃时立即更改铃声音量。例如: 检测到有来电后,我需要将铃声音量设置为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);不会立即改变音量和振动,只是在大约半秒钟内。 先感谢您。 雅各布
答案 0 :(得分:1)
我认为在你使铃声静音之前,你无法做任何事情来克服1/2秒的延迟。有时候它会起作用(即很短或没有延迟),有时你会在很短的时间内听到铃声。
我认为你遇到的问题是传递给setStreamVolume
的标志。
试试这个:
amanager.setStreamVolume(AudioManager.STREAM_RING, 7,
AudioManager.FLAG_SHOW_UI|AudioManager.FLAG_PLAY_SOUND);
您应该使用按位包含或(|
),而不是简单的添加(+
)。