2013-02-09 47 views
2

我要阻止/解除我的Android应用程序来电。 我可以使用下面的代码做到这一点。阻塞来电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

被调用疏通功能是工作,你按下home键之前?你检查过这个场景吗? – vinaykumar 2013-02-09 10:42:28

+0

它是作为一种服务工作吗? – Kristopher 2013-02-09 10:46:27

+0

是的,它是工作之前,我按home键 – 2013-02-09 11:58:01

回答

1

你得到使用活动场景和customPhoneListener我想被定义为您的活动实例变量的电话对象。

但是,当你关闭活动(通过将主屏幕),并再次打开它,你有一个新的环境,因此停止按钮几乎什么都不做。

要解决这一点,你可以尝试以下方法:

1 - 用户应用程序上下文

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

2-确保监听对象customPhoneListener是您的应用程序的生命周期中的相同你的活动。尽量做到static或定义它在application class