我想在我的Android应用中拦截/取消阻止来电。 我可以使用下面的代码来做到这一点。
telephony = (TelephonyManager) this.getSystemService(Context.TELEPHONY_SERVICE);
customPhoneListener = new PhoneCallStateListener(MainActivity.this, vSMS);
start.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
telephony.listen(customPhoneListener,
PhoneStateListener.LISTEN_CALL_STATE);
Toast.makeText(MainActivity.this, "START", Toast.LENGTH_SHORT).show();
}
});
stop.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
telephony.listen(customPhoneListener,
PhoneStateListener.LISTEN_NONE);
Toast.makeText(MainActivity.this, "STOP", Toast.LENGTH_SHORT).show();
}
});
}
但问题是,当我点击开始按钮呼叫阻止服务激活然后我们转到主页呼叫阻止仍处于激活模式。(没关系)。 但是当我打开我的应用程序并按下停止按钮时,呼叫不会解锁。 它仍然被阻止。 为什么? 我做错了什么?
答案 0 :(得分:1)
您正在使用活动上下文获取电话对象,我想在您的活动中将customPhoneListener
定义为实例变量。
但是当您关闭活动(通过转到主屏幕)并再次打开它时,您有一个新的上下文,因此停止按钮几乎什么都不做。
要解决此问题,您可以尝试以下操作:
1-用户应用程序上下文
telephony = (TelephonyManager) getApplicationContext().getSystemService(Context.TELEPHONY_SERVICE);
2-确保在应用程序的生命周期不您的活动期间,侦听器对象customPhoneListener
是相同的。尝试将其设为static
或在application class