android -广播是内部类注册注意事项

我在注册一个网络监听时报了这个错:

07-22 09:30:06.411: E/AndroidRuntime(25736): FATAL EXCEPTION: main
07-22 09:30:06.411: E/AndroidRuntime(25736): Process: xxxxxxxx, PID: 25736
07-22 09:30:06.411: E/AndroidRuntime(25736): java.lang.RuntimeException: Unable to instantiate receiver xxxxxxxx.activity.BaseActivity$NetWorkConnectionChangeReceiver: java.lang.InstantiationException: can't instantiate class xxxxxxxx.activity.BaseActivity$NetWorkConnectionChangeReceiver;no empty constructor
07-22 09:30:06.411: E/AndroidRuntime(25736): 	at android.app.ActivityThread.handleReceiver(ActivityThread.java:2544)
07-22 09:30:06.411: E/AndroidRuntime(25736): 	at android.app.ActivityThread.access$1800(ActivityThread.java:169)
07-22 09:30:06.411: E/AndroidRuntime(25736): 	at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1353)
07-22 09:30:06.411: E/AndroidRuntime(25736): 	at android.os.Handler.dispatchMessage(Handler.java:102)
07-22 09:30:06.411: E/AndroidRuntime(25736): 	at android.os.Looper.loop(Looper.java:136)
07-22 09:30:06.411: E/AndroidRuntime(25736): 	at android.app.ActivityThread.main(ActivityThread.java:5479)
07-22 09:30:06.411: E/AndroidRuntime(25736): 	at java.lang.reflect.Method.invokeNative(Native Method)
07-22 09:30:06.411: E/AndroidRuntime(25736): 	at java.lang.reflect.Method.invoke(Method.java:515)
07-22 09:30:06.411: E/AndroidRuntime(25736): 	at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1283)
07-22 09:30:06.411: E/AndroidRuntime(25736): 	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1099)
07-22 09:30:06.411: E/AndroidRuntime(25736): 	at dalvik.system.NativeStart.main(Native Method)
07-22 09:30:06.411: E/AndroidRuntime(25736): Caused by: java.lang.InstantiationException: can't instantiate class xxxxxxxx.activity.BaseActivity$NetWorkConnectionChangeReceiver; no empty constructor
07-22 09:30:06.411: E/AndroidRuntime(25736): 	at java.lang.Class.newInstanceImpl(Native Method)
07-22 09:30:06.411: E/AndroidRuntime(25736): 	at java.lang.Class.newInstance(Class.java:1208)
07-22 09:30:06.411: E/AndroidRuntime(25736): 	at android.app.ActivityThread.handleReceiver(ActivityThread.java:2539)
07-22 09:30:06.411: E/AndroidRuntime(25736): 	... 10 more

我使用的是静态注册,我刚开始是动态注册(没有问题)。

 <receiver android:name="xxxxxxx.BaseActivity$NetWorkConnectionChangeReceiver" >
            <intent-filter>
                <action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
            </intent-filter>
        </receiver>

java 代码:这里写成static 很重要。。。

public static class NetWorkConnectionChangeReceiver extends BroadcastReceiver {

		@Override
		public void onReceive(Context context, Intent intent) {
			ConnectivityManager connectivityManager = (ConnectivityManager) context
					.getSystemService(Context.CONNECTIVITY_SERVICE);
			NetworkInfo mobNetInfo = connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_MOBILE);
			NetworkInfo wifiNetInfo = connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
			if (wifiNetInfo.isConnected()) {
				NToast.shortToast(context, "WIFI已连接");
			} else {
				NToast.shortToast(context, "WIFI连接断开");
			}
		}
	}


把内部类形式定义的广播加上static类型关键字然后广播的名字要写为
xxx.xxx.xxxx.OutClass$MyReceiver
xxx.xxx.xxxx为你的广播接收器类所在的类的包名
OutClass为你的广播接收器类的外部类名

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值