java - 连接改变状态广播
问题描述
在告诉我我的帖子已经得到回答之前,我使用了在这个论坛上找到的解决方案,但不知何故它对我不起作用..
我的问题:我想在网络连接打开或关闭时更改图像
所以为了做到这一点,我做了一个扩展 BroadcastReceiver 的connectivityReceiver 类,它应该通知我的主类关于网络状态的变化。
public class ConnectivityReceiver
extends BroadcastReceiver {
public static ConnectivityReceiverListener connectivityReceiverListener;
public ConnectivityReceiver() {
super();
}
@Override
public void onReceive(Context context, Intent arg1) {
ConnectivityManager cm = (ConnectivityManager) context
.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo activeNetwork = cm.getActiveNetworkInfo();
boolean isConnected = activeNetwork != null
&& activeNetwork.isConnectedOrConnecting();
if (connectivityReceiverListener != null) {
connectivityReceiverListener.onNetworkConnectionChanged(isConnected);
}
}
public static boolean isConnected() {
ConnectivityManager
cm = (ConnectivityManager) MyApplication.getInstance().getApplicationContext()
.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo activeNetwork = cm.getActiveNetworkInfo();
return activeNetwork != null
&& activeNetwork.isConnectedOrConnecting();
}
public interface ConnectivityReceiverListener {
void onNetworkConnectionChanged(boolean isConnected);
}
}
当我调用网络状态的手动检查时,这确实有效,但看起来我无法在网络更改状态时通知我的 MainActivity。
MainActivity(部分代码):
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
username_inputed = false;
responseFromRequest = "";
username_input = (EditText) findViewById(R.id.username_input);
confirm_usrname = (ImageButton) findViewById(R.id.next_btn_username);
passwd_input = (EditText) findViewById(R.id.password_input);
login = (ImageButton) findViewById(R.id.next_btn_passwd);
errorLog = (TextView) findViewById(R.id.logError);
wifi_disp = (ImageView) findViewById(R.id.wifi_prompt);
checkConnection();
}
private void checkConnection(){
boolean isConnected = ConnectivityReceiver.isConnected();
setWifiDisplay(isConnected);
}
@Override
protected void onResume(){
super.onResume();
//Register connection status listener
MyApplication.getInstance().setConnectivityListener(this);
}
@Override
public void onNetworkConnectionChanged(boolean isConnected){
setWifiDisplay(isConnected);
}
public void setWifiDisplay(boolean wifi){
connection = wifi;
if(wifi){
wifi_disp.setImageResource(R.drawable.wifi_on);
}else wifi_disp.setImageResource(R.drawable.wifi_off);
}
解决方案
好吧,这不是一个完整的答案,但我认为您应该阅读有关sendBroadcast(Intent)
向接收器发送广播的方法,并且您还应该在活动或清单文件中注册您的接收器。
推荐阅读
- excel - 带有 SUM 的 Excel 嵌套公式
- flutter - 颤振:类型'_InternalLinkedHashMap
' 不是类型 'BuildContext' 的子类型 - javascript - 未捕获的类型错误:无法在“节点”上执行“removeChild”:参数 1 不是“节点”类型
- .net - 使用 Novell.Directory 进行虚拟列表视图 Active Directory 搜索会引发 LdapException:不可用的严重扩展
- django - 如何获取django模型实例的最小值
- kubernetes - istio:将 istiogateway 上的 envoyfilter 升级为新语法
- c - 为什么通过套接字发送图片文件时字节数不同?
- javascript - 错误 [ERR_STREAM_WRITE_AFTER_END]:结束后写入
- ios - FirebaseAuth 期间 iOS 项目复制崩溃
- mysql - MySQL get_lock('test_lock', 0) always returns 1