0

一切正常,直到我接听电话,然后几秒钟后,我收到一条“强制关闭”消息……知道出了什么问题吗?

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

哦,顺便说一句,即使应用程序在后台,我怎么能保证我的呼叫接收器总是首先工作?

4

1 回答 1

0
TelephonyManager telephony = (TelephonyManager)context.getSystemService(Context.TELEPHONY_SERVICE);
PhoneStateListener imPhoneListener = new PhoneStateListener();
telephony.listen(imPhoneListener, PhoneStateListener.LISTEN_CALL_STATE);

如果没有看到 logcat,很难确定,但你不应该这样做。

TelephonyManager是一项系统服务,调用是注册对您的对象listen(...)的永久引用。imPhoneListener

ABroadcastReceiver仅在onReceive()执行代码时才存在。这意味着一旦onReceive()退出,您imPhoneListener就不再是一个有效的对象,但TelephonyManager仍然持有对它的引用。

当您接听电话时,您会更改电话的“状态”,并且TelephonyManager会尝试通知不存在的imPhoneListener对象。有什么东西必须在这里打破。

摆脱这三行,因为它们实际上对您没有任何作用BroadcastReceiver-我什至不确定您要在那里实现什么。

于 2012-05-28T18:26:00.777 回答