我正在尝试使用BroadcastReceiver
作为内部类来跟踪网络状态,但我在标题中得到了异常。我该怎么做才能解决这个问题?
public class NetworkChangeReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
final ConnectivityManager connMgr = (ConnectivityManager) context
.getSystemService(Context.CONNECTIVITY_SERVICE);
final android.net.NetworkInfo wifi = connMgr.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
final android.net.NetworkInfo mobile = connMgr.getNetworkInfo(ConnectivityManager.TYPE_MOBILE);
if (wifi.isAvailable() || mobile.isAvailable()) {
setupData();
Log.d("Netowk Available ", "Flag No 1");
}
}
}
答案 0 :(得分:90)
你的
内部广播接收器必须是静态的(通过Manifest注册)
OR
非静态广播接收器必须在父类
内注册和注销
为此。
我使用的是内置广播接收器,没有在课堂上注册。要么将它设置为静态并在Manifest中注册,要么将其设置为非静态,并在父类中注册和取消注册。
答案 1 :(得分:16)
无法通过AndroidManifest.xml
注册非静态内部类。你可以:
动态注册,如this thread中所述,并删除空构造函数。
或者,
让您的内部类静态,并在AndroidManifext.xml
中注册。
答案 2 :(得分:0)
只需将您的Receiver类设为静态,如:
public [static] class ReceiverClass extends BroadcastReceiver
答案 3 :(得分:-2)
e ~~我刚刚遇到这个问题,我将课程NetworkChangeReceiver
重构到另一个地方