我目前正在开发一个可以更改设备铃声模式的应用程序。为此,我创建了一个NotificationListenerService
并从我的代码中调用requestInterruptionFilter
以在响铃模式之间进行更改。这里的一切都很好!
现在,当我在测试应用程序时,遇到了以下情况:我的手机接到一个电话,不久之后我的应用程序设置了INTERRUPTION_FILTER_ALL
,但我的手机没有响铃。所以我在一个可以控制电话的模拟器中尝试了同样的方法,它遇到了同样奇怪的行为:当INTERRUPTION_FILTER_ALARMS
设置 ie 并且有电话打进来,然后我们设置INTERRUPTION_FILTER_ALL
(在接听电话之前)电话不响铃。
你有什么想法我可以在这种情况下实现电话响铃吗?
编辑:我当前的代码如下所示:
public class NotificationService extends NotificationListenerService implements PhoneCallListener {
@Override
public void onCreate() {
super.onCreate();
callReceiver = new CallReceiver(this);
callReceiver.setListener(this);
IntentFilter filter = new IntentFilter();
filter.addAction(ACTION_PHONE_STATE_CHANGED);
registerReceiver(callReceiver, filter);
}
@Override
public void onPhoneCallIncoming(String phoneNumber) {
requestInterruptionFilter(INTERRUPTION_FILTER_ALL);
}
@Override
public void onPhoneCallEnded() {
Log.d("cilenco", "Phone call ended");
}
}
public class CallReceiver extends BroadcastReceiver {
public void setListener(PhoneCallListener listener) {
this.listener = listener;
}
@Override
public void onReceive(Context context, Intent intent) {
if(ACTION_PHONE_STATE_CHANGED.equals(intent.getAction()) {
String state = intent.getExtras().getString(EXTRA_STATE);
String number = intent.getExtras().getString(EXTRA_INCOMING_NUMBER);
if (TelephonyManager.EXTRA_STATE_RINGING.equals(state)) {
listener.onPhoneCallIncoming(number);
} else {
listener.onPhoneCallEnded();
}
}
}
}