Android的:获取java.lang.IllegalArgumentException异常的unregisterReceiver() [英] Android: Getting java.lang.IllegalArgumentException on unregisterReceiver()
问题描述
我有一个应用程序,用户可以注册和注销的设置接收器启用和禁用应用程序的服务。
I am having an application where user can register and unregister receiver from Settings to enable and disable service of app.
我已经采取了切换按钮可让用户控制service.I注册了状态它的接收器和注销同其关闭应用程序状态。
I have taken a toggle button to let user control the app service.I registered a receiver on its on state and unregistered the same on its off state.
当我在在状态使切换按钮启用应用服务。它工作得很好,它成功地注册了接收器并给我敬酒。
It works fine when I enable the app service by making toggle button in on state,it successfully registered the receiver and gives me toast.
但是,当我尝试在切换按钮,再次点击使它在关闭状态时,它给我就行unregisterReceiver(..)。
But when I try to click again on toggle button making it in off state,it gives me exception on line unregisterReceiver(..).
下面是code:
...
onoff.setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View v)
{
BroadcastReceiver b=new SmsReactor();
if(onoff.isChecked())
{
try
{
IntentFilter iFilter=new IntentFilter("android.provider.Telephony.SMS_RECEIVED");
iFilter.setPriority(100);
registerReceiver(b,iFilter);
Toast.makeText(context,"Service Started!",Toast.LENGTH_SHORT).show();
}
catch (Exception e) {
onoff.setChecked(false);
Toast.makeText(context,"Sorry,Couldn't start the service!Try again.",Toast.LENGTH_SHORT).show();
e.printStackTrace();
}
}
else
{
try
{
unregisterReceiver(b); // here it gives me exception
Toast.makeText(context,"Service Stopped!",Toast.LENGTH_SHORT).show();
}
catch (Exception e){
onoff.setChecked(true);
Toast.makeText(context,"Sorry,Couldn't stop the service!Try again.",Toast.LENGTH_SHORT).show();
e.printStackTrace();
}
}
}
});
...
而logcat的:
And the logcat:
12-07 10:16:37.113: W/System.err(445): java.lang.IllegalArgumentException: Receiver not registered: com.xxx.android.xxx.SmsReactor@44e1c500
12-07 10:16:37.113: W/System.err(445): at android.app.ActivityThread$PackageInfo.forgetReceiverDispatcher(ActivityThread.java:667)
12-07 10:16:37.123: W/System.err(445): at android.app.ApplicationContext.unregisterReceiver(ApplicationContext.java:747)
12-07 10:16:37.123: W/System.err(445): at android.content.ContextWrapper.unregisterReceiver(ContextWrapper.java:321)
12-07 10:16:37.123: W/System.err(445): at com.xxx.android.xxx.Settings$2.onClick(Settings.java:90)
12-07 10:16:37.123: W/System.err(445): at android.view.View.performClick(View.java:2364)
12-07 10:16:37.123: W/System.err(445): at android.widget.CompoundButton.performClick(CompoundButton.java:98)
12-07 10:16:37.123: W/System.err(445): at android.view.View.onTouchEvent(View.java:4179)
12-07 10:16:37.123: W/System.err(445): at android.widget.TextView.onTouchEvent(TextView.java:6541)
12-07 10:16:37.123: W/System.err(445): at android.view.View.dispatchTouchEvent(View.java:3709)
12-07 10:16:37.123: W/System.err(445): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:884)
12-07 10:16:37.123: W/System.err(445): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:884)
12-07 10:16:37.123: W/System.err(445): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:884)
12-07 10:16:37.123: W/System.err(445): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:884)
12-07 10:16:37.123: W/System.err(445): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:884)
12-07 10:16:37.123: W/System.err(445): at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:1659)
12-07 10:16:37.123: W/System.err(445): at com.android.internal.policy.impl.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1107)
12-07 10:16:37.123: W/System.err(445): at android.app.Activity.dispatchTouchEvent(Activity.java:2061)
12-07 10:16:37.123: W/System.err(445): at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:1643)
12-07 10:16:37.123: W/System.err(445): at android.view.ViewRoot.handleMessage(ViewRoot.java:1691)
12-07 10:16:37.123: W/System.err(445): at android.os.Handler.dispatchMessage(Handler.java:99)
12-07 10:16:37.133: W/System.err(445): at android.os.Looper.loop(Looper.java:123)
12-07 10:16:37.133: W/System.err(445): at android.app.ActivityThread.main(ActivityThread.java:4363)
12-07 10:16:37.133: W/System.err(445): at java.lang.reflect.Method.invokeNative(Native Method)
12-07 10:16:37.133: W/System.err(445): at java.lang.reflect.Method.invoke(Method.java:521)
12-07 10:16:37.133: W/System.err(445): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860)
12-07 10:16:37.133: W/System.err(445): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)
12-07 10:16:37.133: W/System.err(445): at dalvik.system.NativeStart.main(Native Method)
请帮我找出我在哪里做错了?任何帮助AP preciated。
Please help me finding out where I am doing wrong?! Any help appreciated.
在此先感谢!
推荐答案
只要定义这个广播接收器B =新SmsReactor();
按钮的点击之外的像,的OnCreate()
,然后再试一次让我知道发生什么事,
Just define this BroadcastReceiver b=new SmsReactor();
outside of Button's click like, OnCreate()
and try again let me know what happen,
这篇关于Android的:获取java.lang.IllegalArgumentException异常的unregisterReceiver()的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!