Android 如何接口onReceive方法
我已经设置了一个名为Android 如何接口onReceive方法,android,interface,Android,Interface,我已经设置了一个名为NetworkStatus的类来监视设备的网络状态。在NetworkStatus中,我定义了一个BroadcastReceiver,用于监控连接是否发生变化,即互联网是否已关闭或打开。我想将此方法(即,onReceive)“公开”给实例化NetworkStatus实例的活动 我试图通过在NetworkStatus类中设置接口来实现这一点,但我不确定如何从BroadcastReceiver的onReceive方法调用接口,即 public class NetworkStatus
NetworkStatus
的类来监视设备的网络状态。在NetworkStatus
中,我定义了一个BroadcastReceiver
,用于监控连接是否发生变化,即互联网是否已关闭或打开。我想将此方法(即,onReceive
)“公开”给实例化NetworkStatus
实例的活动
我试图通过在NetworkStatus
类中设置接口来实现这一点,但我不确定如何从BroadcastReceiver
的onReceive
方法调用接口,即
public class NetworkStatus {
public static interface NetworkStatusCallbacks {
void onReceive();
}
public static class ConnectivityChange extends BroadcastReceiver {
public void onReceive(Context context, Intent intent) {
// need to call NetworkStatusCallbacks onReceive here
}
}
}
然后在主要活动中,我会做一些类似的事情
public class MyActivity extends Activity implements NetworkStatus.NetworkStatusCallbacks {
@Override
public void onReceive() {
// Do stuff here
}
}
如果你能给我指点,我会很感激的。谢谢
可能的解决方案
我想我已经找到了解决办法。正如Selvin指出的,要做到这一点,需要执行活动
。因此,我通过从传递给NetworkStatus
类的构造函数的活动上下文中强制转换来获得活动,即将该类的构造函数设置为
private static nsc NetworkStatusCallbacks;
public NetworkStatus (Context context) {
Activity activity = (Activity) context;
nsc = (NetworkStatusCallbacks) activity;
}
然后,我可以从BroadcastReceiver
的onReceive
方法调用接口,如下所示:
public void onReceive(Context context, Intent intent) {
nsc.onReceive();
}
试着这样做:
public class NetworkStatus {
public static interface NetworkStatusCallbacks {
void onReceive();
}
private final NetworkStatusCallbacks m_cb;
NetworkStatus(NetworkStatusCallbacks cb)
{
m_cb=cb;
}
public static class ConnectivityChange extends BroadcastReceiver {
public void onReceive(Context context, Intent intent) {
// need to call NetworkStatusCallbacks onReceive here
m_cb.onReceive()
}
}
}
简而言之,您不能,因为您没有MyActivity实例,所以最好将此信息存储在ConnectivityChange.onRecive的fx数据库中,并在Activity中读取这些值…好的。谢谢你,塞尔文。我不能将活动传递到构造函数中的NetworkStatus
中吗?谢谢。但我得到了一个编译错误,即变量m_cb可能没有初始化?@Nargis m_cb应该是ConnectivityChange
notNetworkStatus
(与构造函数相同)的字段。。。唯一的问题是他是用代码还是AndroidManifest.xml设置BroadcastReceiver。。。如果在清单中它将不工作…广播接收器包含在清单文件中