如何在Android中的其他活动或片段中使用接收器信息



我正在尝试制作一个接收器,当手机连接到互联网时会发出通知。

现在,问题是我有一个处理两个片段的主活动
在其中一个片段中,我有一个需要使用互联网的搜索方法
所以,我想做的是:如果没有互联网,那么用户按下搜索按钮后,就会得到一杯吐司。

为了做到这一点,我在主要活动中编写了以下课程

public class ConnectionChangeReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Boolean netBol;
ConnectivityManager connectivityManager = (ConnectivityManager) context
.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo activeNetInfo = connectivityManager
.getNetworkInfo(ConnectivityManager.TYPE_MOBILE);
boolean isConnected = activeNetInfo != null
&& activeNetInfo.isConnectedOrConnecting();
if (isConnected){
Boolean netBol = true;
}else{
netBol = false;
Toast.makeText(context, R.string.no_internet, Toast.LENGTH_LONG).show();
}
}
}

正如您所看到的,我正在尝试使用布尔netBol来确定是否存在连接。

但关键是,我想把它传递给搜索片段,我不知道该怎么做。

我还在清单中添加了以下行:

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

我还在主活动中放入了以下代码;

ConnectionChangeReceiver netReceiver = new ConnectionChangeReceiver();
IntentFilter filterNet = new IntentFilter("android.net.conn.CONNECTIVITY_CHANGE");
registerReceiver(netReceiver, filterNet);

就我的理解而言,这意味着我已经在一个接收器上声明了,但我需要在片段上声明一个。

所以我想问的是:我应该怎么做才能将信息从接收器传递到片段,这样我就可以知道是否有互联网了?

简单。使用otto

您可以在此处找到示例应用程序。

按如下方式更改代码:

你可以在你的接收器上做这样的事情:

if (isConnected){
BusProvider.getInstance().post(new InternetAvailable(true));
}else{
BusProvider.getInstance().post(new InternetAvailable(false));
Toast.makeText(context, R.string.no_internet, Toast.LENGTH_LONG).show();
}

InternetAvailable类可以是这样的:

public class InternetAvailable {
private static boolean isInternetAvalable;

public InternetAvailable(boolean isInternetAvailableParam) {
isInternetAvailable = isInternetAvailableParam
}
@Produce public InternetAvailable isInternetAvailable() {
return isInternetAvailable;
}
}

BusProvider类如下:

public final class BusProvider {
private static final Bus BUS = new Bus();
public static Bus getInstance() {
return BUS;
}
private BusProvider() {
// No instances.
}
}

像这样修改你的SearchFragment

@Override public void onResume() {
super.onResume();
BusProvider.getInstance().register(this);
}
@Override public void onPause() {
super.onPause();
BusProvider.getInstance().unregister(this);
}

最新更新