呼叫接收器使我的应用程序“强制关闭”

时间:2012-05-28 17:38:22

标签: android

这一切都有效,直到我接听电话,然后几秒钟后我收到“强制关闭”的消息......任何想法有什么问题?

     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);
}                      

哦,顺便说一下,即使应用程序在后台,我怎么能保证我的呼叫接收器始终工作?

1 个答案:

答案 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无论如何都没有任何目的 - 我甚至不确定你想要在那里做什么。