检查网络连接android
我是新使用安卓服务的,我很困惑。我有和活动,我想检查所有时间的网络连接是wifi或3g。我实现了一个简单的服务和一个BroadcastReveiver 这是服务的代码 这里是广播接收器的代码 这是清单中的用户权限检查网络连接android,android,service,broadcastreceiver,intentservice,android-networking,Android,Service,Broadcastreceiver,Intentservice,Android Networking,我是新使用安卓服务的,我很困惑。我有和活动,我想检查所有时间的网络连接是wifi或3g。我实现了一个简单的服务和一个BroadcastReveiver 这是服务的代码 这里是广播接收器的代码 这是清单中的用户权限 这不起作用,我也不知道为什么。不建议一直检查连接,只有在需要时才呼叫: 无线网络: 3G: 不建议始终检查连接,请仅在需要时拨打: 无线网络: 3G: 您在活动中注册的IntentFilter没有与之关联的任何类型的筛选器 由于您是使用连接操作创建意图的,因此需要使用相同的操作创建一个
这不起作用,我也不知道为什么。不建议一直检查连接,只有在需要时才呼叫: 无线网络: 3G:
不建议始终检查连接,请仅在需要时拨打: 无线网络: 3G: 您在活动中注册的IntentFilter没有与之关联的任何类型的筛选器 由于您是使用连接操作创建意图的,因此需要使用相同的操作创建一个IntentFilter,以便触发BroadcastReceiver 例如:
LocalBroadcastManager.getInstance(this).registerReceiver(
new NetworkReceiver(), new IntentFilter("connection"));
您在活动中注册的IntentFilter没有与之关联的任何类型的筛选器
由于您是使用连接操作创建意图的,因此需要使用相同的操作创建一个IntentFilter,以便触发BroadcastReceiver
例如:
LocalBroadcastManager.getInstance(this).registerReceiver(
new NetworkReceiver(), new IntentFilter("connection"));
获取当前网络状态的测试似乎不正确。如果WIFI或移动数据不可用,此测试将返回false
if ( conMgr.getNetworkInfo(0).getState() == NetworkInfo.State.DISCONNECTED
|| conMgr.getNetworkInfo(1).getState() == NetworkInfo.State.DISCONNECTED)
如果您正在查看网络数据是否可用,请查看如何使用。您可以将测试替换为以下内容:
NetworkInfo activeNetwork = cm.getActiveNetworkInfo();
boolean isConnected = activeNetwork != null &&
activeNetwork.isConnectedOrConnecting();
获取当前网络状态的测试似乎不正确。如果WIFI或移动数据不可用,此测试将返回false
if ( conMgr.getNetworkInfo(0).getState() == NetworkInfo.State.DISCONNECTED
|| conMgr.getNetworkInfo(1).getState() == NetworkInfo.State.DISCONNECTED)
如果您正在查看网络数据是否可用,请查看如何使用。您可以将测试替换为以下内容:
NetworkInfo activeNetwork = cm.getActiveNetworkInfo();
boolean isConnected = activeNetwork != null &&
activeNetwork.isConnectedOrConnecting();
您是否已在下面添加广播接收器的目的过滤器
<receiver android:name=".BroadcastReceiver" >
<intent-filter>
<action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
</intent-filter>
</receiver>
您是否已在下面添加广播接收器的目的过滤器
<receiver android:name=".BroadcastReceiver" >
<intent-filter>
<action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
</intent-filter>
</receiver>
这不起作用意味着什么?它会崩溃吗?这不准确吗?如果不准确,你看到了什么?你期望什么?@Tanis.7x打印LN没有显示,没有碰撞这意味着什么不起作用?它会崩溃吗?这不准确吗?如果不准确,你看到了什么?你期望什么?@Tanis.7x打印的LN没有显示,没有崩溃为什么?它会消耗很多资源吗?是的,你的电池会耗尽=哦,为什么?它会消耗很多资源吗?是的,你的电池会耗尽=O@Frog:此外,在开始活动之前注册接收器。由于启动服务、分叉后台线程等方面的开销,您的代码可能大部分时间都会按照您拥有的顺序工作。但是,在触发可能发送本地广播的代码之前,先接收本地广播是有意义的。@Frog:另外,在开始活动之前注册接收者。由于启动服务、分叉后台线程等方面的开销,您的代码可能大部分时间都会按照您拥有的顺序工作。但是,在触发可能发送本地广播的代码之前,先接收本地广播是有意义的。
NetworkInfo activeNetwork = cm.getActiveNetworkInfo();
boolean isConnected = activeNetwork != null &&
activeNetwork.isConnectedOrConnecting();
<receiver android:name=".BroadcastReceiver" >
<intent-filter>
<action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
</intent-filter>
</receiver>
public boolean isOnline(Context context) {
ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo netInfo = cm.getActiveNetworkInfo();
//should check null because in air plan mode it will be null
return (netInfo != null && netInfo.isConnected());
}