2

我想在我的 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();
        }
    });
}

但问题是当我点击开始按钮呼叫阻止服务激活然后我们进入主页呼叫阻止仍处于激活模式。(没关系)。但是当我打开我的应用程序并按下停止按钮时,呼叫不会解除阻止。它仍然被阻止。为什么?我做错了什么?

4

1 回答 1

1

您正在使用活动上下文获取电话对象,并且customPhoneListener我猜想在您的活动中被定义为实例变量。

但是,当您关闭活动(通过转到主屏幕)并再次打开它时,您将获得一个新的上下文,因此停止按钮几乎没有任何作用。

要解决此问题,您可以尝试以下操作:

1- 用户应用程序上下文

telephony = (TelephonyManager)  getApplicationContext().getSystemService(Context.TELEPHONY_SERVICE);

2-确保侦听器对象customPhoneListener在您的应用程序的生命周期中是相同的,而不是您的活动。尝试制作static或定义它application class

于 2013-02-09T11:00:51.457 回答