我希望实现onCallStateChanged()
的{{1}}并使用它的功能在收到来电时更改音频设置。
PhoneStateListener
如果启用了选项1和选项3,我想要通知通知,但许多新公司只提供一个通知和通话选项。
如果选项1和选项3打开,我已将设备设置为静音模式,但每当收到呼叫时,我希望我的设备响铃。因此,在private final class CallStateListener extends PhoneStateListener {
@Override
public void onCallStateChanged(int state, String incomingNumber) {
Utils.log("CallStateListener");
switch (state) {
case TelephonyManager.CALL_STATE_IDLE:
Utils.log("Idle");
break;
case TelephonyManager.CALL_STATE_OFFHOOK:
Utils.log("OFFHOOK");
break;
case TelephonyManager.CALL_STATE_RINGING:
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
if(prefs.getBoolean(Constants.PREF_OPTION_1, false)){
final AudioManager audioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
int maxStreamValue = audioManager.getStreamMaxVolume(AudioManager.STREAM_NOTIFICATION);
int volumeLevel = prefs.getInt(Constants.PREF_VOLUME_LEVEL, Constants.PREF_VOLUME_LEVEL_DEFAULT);
int volume = (int) Math.ceil(maxStreamValue * (volumeLevel / 100.0));
if(prefs.getBoolean(Constants.PREF_OPTION_3, false)){
Utils.log("Option3 true ringing");
audioManager.setRingerMode(AudioManager.RINGER_MODE_NORMAL);
}
Utils.changeNotificationVolume(audioManager, volume);
Utils.log("RINGING");
}
break;
}
callState = state;
}
}
中,我的代码可以关闭静音模式并振铃设备。
这件事只适用于某个时候。在尝试了很多设备之后,我发现通常这个东西并不适用于那些滞后很多(非常慢)的手机。 我认为这是因为如果在移动开始响铃这项工作之前改变音频设置,如果没有,即使设置被更改,这也不起作用。我对吗?有没有解决这个问题的方法?有没有办法延迟Android设备的响铃?或者我可以做些什么来让它每次都有效吗?