Android BroadcastReceiver连接\u更改是否始终在首次启动应用程序中运行?
我在Google Developer上读到: (“android.net.conn.CONNECTIVITY_CHANGE”)在连接详细信息发生更改时执行操作 我有以下代码: 公共类MainActivity扩展了AppCompatActivity{Android BroadcastReceiver连接\u更改是否始终在首次启动应用程序中运行?,android,android-activity,broadcastreceiver,Android,Android Activity,Broadcastreceiver,我在Google Developer上读到: (“android.net.conn.CONNECTIVITY_CHANGE”)在连接详细信息发生更改时执行操作 我有以下代码: 公共类MainActivity扩展了AppCompatActivity{ private NetworkChangeReceiver receiver; private boolean connIntentFilterIsRegistered; @Override protected void onCreate(Bun
private NetworkChangeReceiver receiver;
private boolean connIntentFilterIsRegistered;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
receiver = new NetworkChangeReceiver();
}
@Override
protected void onPause() {
super.onPause();
if (connIntentFilterIsRegistered) {
unregisterReceiver(receiver);
connIntentFilterIsRegistered = false;
}
}
@Override
protected void onResume() {
super.onResume();
if (!connIntentFilterIsRegistered) {
registerReceiver(receiver, new IntentFilter("android.net.conn.CONNECTIVITY_CHANGE"));
connIntentFilterIsRegistered = true;
}
}
及
//
公共类NetworkUtil{
public static int TYPE_WIFI = 1;
public static int TYPE_MOBILE = 0;
public static int TYPE_NOT_CONNECTED = 2;
public static int getConnectivityStatus(Context context) {
ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo activeNetwork = cm.getActiveNetworkInfo();
if (activeNetwork != null && activeNetwork.isConnectedOrConnecting()) {
if (activeNetwork.getType() == ConnectivityManager.TYPE_WIFI) {
return TYPE_WIFI;
}
if (activeNetwork.getType() == ConnectivityManager.TYPE_MOBILE) {
return TYPE_MOBILE;
}
}
return TYPE_NOT_CONNECTED;
}
public static String getConnectivityStatusString(Context context) {
int conn = NetworkUtil.getConnectivityStatus(context);
String status = null;
if (conn == TYPE_MOBILE) {
status = "Mobile cellular enabled";
} else if (conn == TYPE_WIFI) {
status = "Wifi enabled";
} else if (conn == TYPE_NOT_CONNECTED) {
status = "Not connected to internet";
}
return status;
}
}
当我第一次启动应用程序时,这个意图总是触发并显示一个与网络当前状态的对话框。但是根据本文档,它只在连接更改时发生?如果我只想在网络更改时显示,我该怎么办?非常感谢广播
android.net.conn.CONNECTIVITY\u change
广播。这意味着每当您为此操作注册BroadcastReceiver
时,它总是会立即触发,并且onReceive()
将通过最近的广播连接更改被调用。这允许您在不等待更改的情况下获取连接的当前状态
如果要忽略当前状态,而只想处理状态更改,可以将其添加到onReceive()
:
非常感谢。在看到你的答案之前,我就这么做了,而且效果很好:D
if (isInitialStickyBroadcast()) {
// Ignore this call to onReceive, as this is the sticky broadcast
} else {
// Connectivity state has changed
... (your code here)
}