Sta*_*tan 10 networking android connectivity broadcastreceiver android-intent
我试图从CONNECTIVITY_ACTION接收BroadcastMessages:
// register BroadcastReceiver on network state changes
final IntentFilter mIFNetwork = new IntentFilter();
mIFNetwork.addAction(android.net.ConnectivityManager.CONNECTIVITY_ACTION); //"android.net.conn.CONNECTIVITY_CHANGE"
registerReceiver(mIRNetwork, mIFNetwork);
Run Code Online (Sandbox Code Playgroud)
和接收者是:
private BroadcastReceiver mIRNetwork = new BroadcastReceiver() {
@Override
public void onReceive(final Context context, final Intent intent) {
android.util.Log.i(TAG,"mIRNetwork: Network State Received: "+intent.getAction());
Bundle extras = intent.getExtras();
if (extras!=null){
android.util.Log.i(TAG,"mIRNetwork: ACTION_BACKGROUND_DATA_SETTING_CHANGED: "+extras.getString(ConnectivityManager.ACTION_BACKGROUND_DATA_SETTING_CHANGED));
android.util.Log.i(TAG,"mIRNetwork: CONNECTIVITY_ACTION: "+extras.getString(ConnectivityManager.CONNECTIVITY_ACTION));
android.util.Log.i(TAG,"mIRNetwork: EXTRA_EXTRA_INFO: "+extras.getString(ConnectivityManager.EXTRA_EXTRA_INFO));
android.util.Log.i(TAG,"mIRNetwork: EXTRA_NO_CONNECTIVITY: "+extras.getString(ConnectivityManager.EXTRA_NO_CONNECTIVITY));
android.util.Log.i(TAG,"mIRNetwork: EXTRA_REASON: "+extras.getString(ConnectivityManager.EXTRA_REASON));
}
}
Run Code Online (Sandbox Code Playgroud)
总之,额外的东西总是空的.我认为,如果我松散WiFi连接,我应该得到EXTRA_NO_CONNECTIVITY(因为它是互联网的唯一途径)或至少从列表中的东西.但没有运气.如果我断开我的WiFi AP接收器得到他的消息,但有额外的空.当我再次打开我的WiFi接收器发射但没有额外的时候......为什么会这样?如何知道该应用程序丢失了任何网络连接?我想是这样的.
Dha*_*dra 16
您无法获得额外的收益,但您可以通过这种方式获取数据
private class ConnectivityBroadcastReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
boolean noConnectivity = intent.getBooleanExtra(ConnectivityManager
.EXTRA_NO_CONNECTIVITY, false);
NetworkInfo info1 = (NetworkInfo) intent.getParcelableExtra(ConnectivityManager
.EXTRA_NETWORK_INFO);
NetworkInfo info2 = (NetworkInfo) intent.getParcelableExtra(ConnectivityManager
.EXTRA_OTHER_NETWORK_INFO);
String reason = intent.getStringExtra(ConnectivityManager.EXTRA_REASON);
boolean failOver = intent.getBooleanExtra(ConnectivityManager.EXTRA_IS_FAILOVER, false);
Log.d("MY_TAG", "onReceive(): mNetworkInfo=" + info1 + " mOtherNetworkInfo = " +
(info2 == null ? "[none]" : info2 + " noConn=" + noConnectivity));
}
}
Run Code Online (Sandbox Code Playgroud)
有关详细信息,请参阅此
Dharmendras 的回答很好。但是,请注意,EXTRA_NETWORK_INFO现在已弃用(自 Api Level 14 起),Android 文档说明如下:
由于 NetworkInfo 可能因 UID 而异,因此应用程序应始终通过
getActiveNetworkInfo().
这实际上使我们的事情变得非常容易。您可以重复使用之前可能进行的连接检查并执行以下操作:
private class ConnectivityBroadcastReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
unregisterReceiver(this)
checkConnection();
}
}
private void checkConnection() {
ConnectivityManager cm = (ConnectivityManager) getSystemService(CONNECTIVITY_SERVICE);
if (cm.getActiveNetworkInfo() != null && cm.getActiveNetworkInfo()
.isConnectedOrConnecting()) {
// do something
}
}
Run Code Online (Sandbox Code Playgroud)
假设您在注册广播的活动中。
这也有一个额外的好处,即遵循最佳实践,尽可能简短地只收听连接广播,这里概述:)
| 归档时间: |
|
| 查看次数: |
24625 次 |
| 最近记录: |