我是Android中的新手。请告诉我以下日志猫错误是什么意思,我该如何摆脱它?在我的应用程序中,我正在做的是阻止不需要的调用。当我在使用我的应用程序时按下后退按钮时,我收到此错误。请帮忙
05-18 16:58:32.614: E/ActivityThread(3265): Activity com.deepthi.blockmycalls.BlockMyCallsActivity has leaked IntentReceiver com.deepthi.blockmycalls.BlockMyCallsActivity$1@44f03d18 that was originally registered here. Are you missing a call to unregisterReceiver()?
05-18 16:58:32.614: E/ActivityThread(3265): android.app.IntentReceiverLeaked: Activity com.deepthi.blockmycalls.BlockMyCallsActivity has leaked IntentReceiver com.deepthi.blockmycalls.BlockMyCallsActivity$1@44f03d18 that was originally registered here. Are you missing a call to unregisterReceiver()?
05-18 16:58:32.614: E/ActivityThread(3265): at android.app.ActivityThread$PackageInfo$ReceiverDispatcher.<init>(ActivityThread.java:939)
05-18 16:58:32.614: E/ActivityThread(3265): at android.app.ActivityThread$PackageInfo.getReceiverDispatcher(ActivityThread.java:734)
05-18 16:58:32.614: E/ActivityThread(3265): at android.app.ContextImpl.registerReceiverInternal(ContextImpl.java:791)
05-18 16:58:32.614: E/ActivityThread(3265): at android.app.ContextImpl.registerReceiver(ContextImpl.java:778)
05-18 16:58:32.614: E/ActivityThread(3265): at android.app.ContextImpl.registerReceiver(ContextImpl.java:772)
05-18 16:58:32.614: E/ActivityThread(3265): at android.content.ContextWrapper.registerReceiver(ContextWrapper.java:318)
05-18 16:58:32.614: E/ActivityThread(3265): at com.deepthi.blockmycalls.BlockMyCallsActivity.onCheckedChanged(BlockMyCallsActivity.java:155)
05-18 16:58:32.614: E/ActivityThread(3265): at android.widget.CompoundButton.setChecked(CompoundButton.java:124)
05-18 16:58:32.614: E/ActivityThread(3265): at android.widget.CompoundButton.toggle(CompoundButton.java:86)
05-18 16:58:32.614: E/ActivityThread(3265): at android.widget.CompoundButton.performClick(CompoundButton.java:98)
05-18 16:58:32.614: E/ActivityThread(3265): at android.view.View$PerformClick.run(View.java:8816)
05-18 16:58:32.614: E/ActivityThread(3265): at android.os.Handler.handleCallback(Handler.java:587)
05-18 16:58:32.614: E/ActivityThread(3265): at android.os.Handler.dispatchMessage(Handler.java:92)
05-18 16:58:32.614: E/ActivityThread(3265): at android.os.Looper.loop(Looper.java:123)
05-18 16:58:32.614: E/ActivityThread(3265): at android.app.ActivityThread.main(ActivityThread.java:4627)
05-18 16:58:32.614: E/ActivityThread(3265): at java.lang.reflect.Method.invokeNative(Native Method)
05-18 16:58:32.614: E/ActivityThread(3265): at java.lang.reflect.Method.invoke(Method.java:521)
05-18 16:58:32.614: E/ActivityThread(3265): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
05-18 16:58:32.614: E/ActivityThread(3265): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
05-18 16:58:32.614: E/ActivityThread(3265): at dalvik.system.NativeStart.main(Native Method)
05-18 16:58:32.614: E/ActivityThread(3265): Activity com.deepthi.blockmycalls.BlockMyCallsActivity has leaked IntentReceiver com.deepthi.blockmycalls.BlockMyCallsActivity$1@44efa3a8 that was originally registered here. Are you missing a call to unregisterReceiver()?
05-18 16:58:32.614: E/ActivityThread(3265): android.app.IntentReceiverLeaked: Activity com.deepthi.blockmycalls.BlockMyCallsActivity has leaked IntentReceiver com.deepthi.blockmycalls.BlockMyCallsActivity$1@44efa3a8 that was originally registered here. Are you missing a call to unregisterReceiver()?
05-18 16:58:32.614: E/ActivityThread(3265): at android.app.ActivityThread$PackageInfo$ReceiverDispatcher.<init>(ActivityThread.java:939)
05-18 16:58:32.614: E/ActivityThread(3265): at android.app.ActivityThread$PackageInfo.getReceiverDispatcher(ActivityThread.java:734)
05-18 16:58:32.614: E/ActivityThread(3265): at android.app.ContextImpl.registerReceiverInternal(ContextImpl.java:791)
05-18 16:58:32.614: E/ActivityThread(3265): at android.app.ContextImpl.registerReceiver(ContextImpl.java:778)
05-18 16:58:32.614: E/ActivityThread(3265): at android.app.ContextImpl.registerReceiver(ContextImpl.java:772)
05-18 16:58:32.614: E/ActivityThread(3265): at android.content.ContextWrapper.registerReceiver(ContextWrapper.java:318)
05-18 16:58:32.614: E/ActivityThread(3265): at com.deepthi.blockmycalls.BlockMyCallsActivity.onCheckedChanged(BlockMyCallsActivity.java:155)
05-18 16:58:32.614: E/ActivityThread(3265): at android.widget.CompoundButton.setChecked(CompoundButton.java:124)
05-18 16:58:32.614: E/ActivityThread(3265): at android.widget.CompoundButton.toggle(CompoundButton.java:86)
05-18 16:58:32.614: E/ActivityThread(3265): at android.widget.CompoundButton.performClick(CompoundButton.java:98)
05-18 16:58:32.614: E/ActivityThread(3265): at android.view.View$PerformClick.run(View.java:8816)
05-18 16:58:32.614: E/ActivityThread(3265): at android.os.Handler.handleCallback(Handler.java:587)
05-18 16:58:32.614: E/ActivityThread(3265): at android.os.Handler.dispatchMessage(Handler.java:92)
05-18 16:58:32.614: E/ActivityThread(3265): at android.os.Looper.loop(Looper.java:123)
05-18 16:58:32.614: E/ActivityThread(3265): at android.app.ActivityThread.main(ActivityThread.java:4627)
05-18 16:58:32.614: E/ActivityThread(3265): at java.lang.reflect.Method.invokeNative(Native Method)
05-18 16:58:32.614: E/ActivityThread(3265): at java.lang.reflect.Method.invoke(Method.java:521)
05-18 16:58:32.614: E/ActivityThread(3265): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
05-18 16:58:32.614: E/ActivityThread(3265): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
05-18 16:58:32.614: E/ActivityThread(3265): at dalvik.system.NativeStart.main(Native Method)
05-18 16:59:55.812: D/dalvikvm(3265): GC_EXPLICIT freed 4770 objects / 267120 bytes in 592ms
我的代码:
@Override
public void onCheckedChanged(CompoundButton arg0, boolean arg1) {
// TODO Auto-generated method stub
CallBlocker =new BroadcastReceiver()
{
@Override
public void onReceive(Context context, Intent intent) {
Bundle extra=intent.getExtras();//new
telephonyManager = (TelephonyManager)context.getSystemService(Context.TELEPHONY_SERVICE);
if(extra!=null)//new=== getting the blocked number
{
state=extra.getString(telephonyManager.EXTRA_STATE);
if(state.equals(telephonyManager.EXTRA_STATE_RINGING))
{
number=extra.getString(telephonyManager.EXTRA_INCOMING_NUMBER);
Log.w("NUMBER",number);
}
}
Class c = null;
try {
c = Class.forName(telephonyManager.getClass().getName());
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Method m = null;
try {
m = c.getDeclaredMethod("getITelephony");
} catch (SecurityException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (NoSuchMethodException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
m.setAccessible(true);
try {
telephonyService = (ITelephony)m.invoke(telephonyManager);
} catch (IllegalArgumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InvocationTargetException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
telephonyManager.listen(new MyPhoneStateListener(), PhoneStateListener.LISTEN_CALL_STATE);
}//onReceive()
class MyPhoneStateListener extends PhoneStateListener
{
public void onCallStateChanged(int state, String incomingNumber)
{
switch (state)
{
case TelephonyManager.CALL_STATE_RINGING:
if (true) // if incomingNumber need to be blocked
{
if(Enable_chkbox.isChecked())
{
try {
end_call=telephonyService.endCall();
if(end_call==true)
{
android.telephony.SmsManager sms = android.telephony.SmsManager.getDefault();
sms.sendTextMessage(number, null, SMS, null, null);
}
Toast.makeText(getApplicationContext(),"Enabled", Toast.LENGTH_LONG).show();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}//try catch
}//if chkbox enabled
}
break;
default:
break;
}
}
}
};//Broadcast receiver
IntentFilter filter= new IntentFilter("android.intent.action.PHONE_STATE");
registerReceiver(CallBlocker, filter);
}
取消注册:
@Override
protected void onDestroy() {
// TODO Auto-generated method stub
super.onDestroy();
unregisterReceiver(CallBlocker);
this.finish();
Toast.makeText(getApplicationContext(), "text", Toast.LENGTH_LONG).show();
}
除非我按下后退按钮,否则一切正常。
答案 0 :(得分:1)
您没有显示您的代码,所以这是猜测。
线索在这里:
05-18 16:58:32.614:E / ActivityThread(3265):活动com.deepthi.blockmycalls.BlockMyCallsActivity泄露了最初在此处注册的IntentReceiver com.deepthi.blockmycalls.BlockMyCallsActivity$1@44efa3a8。你是否错过了对unregisterReceiver()的调用?
当您的活动结束时,您是否取消注册接收器?
@Override
protected void onPause(){
super.onPause();
if (myMessageReceiver != null){
unregisterReceiver(myMessageReceiver );
myMessageReceiver = null;
}
}
答案 1 :(得分:0)
是的,你有一个你不会发布/取消注册的资源 需要更多代码才能具体
答案 2 :(得分:0)
如果你可以发布你的代码,可能会更容易帮助你,但似乎你已经两次注册你的接收器。