public void onReceive(Context context, Intent intent) {
// TODO Auto-generated method stub
TelephonyManager telephony = (TelephonyManager)context.getSystemService(Context.TELEPHONY_SERVICE);
PhoneStateListener imPhoneListener = new PhoneStateListener();
telephony.listen(imPhoneListener, PhoneStateListener.LISTEN_CALL_STATE);
Bundle bundle = intent.getExtras();
String phoneNr= bundle.getString("incoming_number");
Intent intent1=new Intent("android.intent.action.Checker");
intent1.putExtra("phoneNr", phoneNr);
context.startActivity(intent1);
}
哦,顺便说一下,即使应用程序在后台,我怎么能保证我的呼叫接收器始终工作?
答案 0 :(得分:0)
TelephonyManager telephony = (TelephonyManager)context.getSystemService(Context.TELEPHONY_SERVICE);
PhoneStateListener imPhoneListener = new PhoneStateListener();
telephony.listen(imPhoneListener, PhoneStateListener.LISTEN_CALL_STATE);
如果没有看到logcat,很难确定,但你不应该这样做。
TelephonyManager
是系统服务,调用listen(...)
正在注册对imPhoneListener
对象的永久引用。
只有BroadcastReceiver
中的代码正在执行时,onReceive()
才存在。这意味着退出onReceive()
后,您的imPhoneListener
不再是有效对象,但TelephonyManager
仍然保留对它的引用。
当您接听电话时,您将更改手机的“状态”,TelephonyManager
将尝试通知不存在的imPhoneListener
对象。有些东西必须在这里打破。
摆脱这三条线,因为它们对BroadcastReceiver
无论如何都没有任何目的 - 我甚至不确定你想要在那里做什么。