我有一个任务-手机响铃时立即更改铃声音量。例如:
检测到有来电后,我需要将铃声音量设置为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/2秒的延迟。有时它起作用(即非常短或没有延迟),有时您会在短时间内听到铃声。
我认为您遇到的问题是传递给setStreamVolume
的标志。
尝试这个:
amanager.setStreamVolume(AudioManager.STREAM_RING, 7,
AudioManager.FLAG_SHOW_UI|AudioManager.FLAG_PLAY_SOUND);
您应该使用按位包含或(
|
),而不是简单的加法(+
)。关于android - 来电期间的setRingerMode-振铃,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8175650/