60
A
回答
144
新的Java类:
public class ConnectionChangeReceiver extends BroadcastReceiver
{
@Override
public void onReceive(Context context, Intent intent)
{
ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo activeNetInfo = connectivityManager.getActiveNetworkInfo();
NetworkInfo mobNetInfo = connectivityManager.getNetworkInfo( ConnectivityManager.TYPE_MOBILE);
if (activeNetInfo != null)
{
Toast.makeText(context, "Active Network Type : " + activeNetInfo.getTypeName(), Toast.LENGTH_SHORT).show();
}
if(mobNetInfo != null)
{
Toast.makeText(context, "Mobile Network Type : " + mobNetInfo.getTypeName(), Toast.LENGTH_SHORT).show();
}
}
}
在AndroidManifest.xml中新的XML的 “清单” 元素:
<!-- Needed to check when the network connection changes -->
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
在AndroidManifest.xml中新的XML “应用程序” 元素:
<receiver android:name="com.blackboard.androidtest.receiver.ConnectionChangeReceiver"
android:label="NetworkConnection">
<intent-filter>
<action android:name="android.net.conn.CONNECTIVITY_CHANGE"/>
</intent-filter>
</receiver>
7
上述答案仅适用于移动分组数据已启用。否则,ConnectivityManager将为空,并且不能再检索NetworkInfo。解决方法是使用PhoneStateListener或TelephonyManager。
16
我一直在使用一个小设置来检查带宽,以确定如何缩放事物,如图像。
下的活性,在AndroidManifest:
<intent-filter>
...
<action android:name="android.net.conn.CONNECTIVITY_CHANGE"/>
</intent-filter>
在活动其中正在执行的检查:然后
boolean network;
int bandwidth;
@Override
public void onCreate(Bundle savedInstanceState) {
...
network = isDataConnected();
bandwidth = isHighBandwidth();
registerReceiver(new BroadcastReceiver() {
public void onReceive(Context context, Intent intent) {
network = isDataConnected();
bandwidth = isHighBandwidth();
}
}, new IntentFilter("android.net.conn.CONNECTIVITY_CHANGE"));
...
}
...
private boolean isDataConnected() {
try {
ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
return cm.getActiveNetworkInfo().isConnectedOrConnecting();
} catch (Exception e) {
return false;
}
}
private int isHighBandwidth() {
ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo info = cm.getActiveNetworkInfo();
if (info.getType() == ConnectivityManager.TYPE_WIFI) {
WifiManager wm = (WifiManager) getSystemService(Context.WIFI_SERVICE);
return wm.getConnectionInfo().getLinkSpeed();
} else if (info.getType() == ConnectivityManager.TYPE_MOBILE) {
TelephonyManager tm = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
return tm.getNetworkType();
}
return 0;
}
一个示例用法是:
if (network) {
if (bandwidth > 16) {
// Code for large items
} else if (bandwidth <= 16 && bandwidth > 8) {
// Code for medium items
} else {
//Code for small items
}
} else {
//Code for disconnected
}
这是不是最漂亮的,但它具有足够的灵活性,可以改变项目de的带宽截止值等待他们是什么和我的要求。
+0
找到这个非常有用,谢谢:) – Skynet 2014-02-06 10:15:20
9
如果使用Android Annotations是你在你的活动试试这个选项 - 这一切,产生其余的:
@Receiver(actions = ConnectivityManager.CONNECTIVITY_ACTION,
registerAt = Receiver.RegisterAt.OnResumeOnPause)
void onConnectivityChange() {
//react
}
使用这个只有当你已经在使用AndroidAnnotations - 把你的项目中这种依赖性只为这段代码会过度杀伤。
相关问题
- 1. Golang关闭网络监听器
- 2. java网络事件监听器
- 3. 如何在网络层监听?
- 4. Android Mediaplayer错误监听器
- 5. Android WebView下载监听器
- 6. Android GPS位置监听器
- 7. Android WiFi状态监听器
- 8. Android菜单监听器
- 9. Android AudioManager事件监听器?
- 10. Android Wifi监听器策略
- 11. Android EditText监听器输入
- 12. Android,事件监听器?
- 13. Android的全球监听器
- 14. Android Button监听器实现
- 15. Android - 事件监听器
- 16. Android Studio响应监听器
- 17. Tab变化监听器android
- 18. Android触摸监听器?
- 19. 在Android的另一个监听器中定义监听器
- 20. 在Android中:如何监听/监控特定应用的网络活动
- 21. 公开一个不监听端口80的网络服务器
- 22. 网络监听器不能获得积分
- 23. Windows Mobile中的网络连接监听器
- 24. 全球网络连接监听器的策略
- 25. 火力认证监听器和网络连接
- 26. Java网络监视器
- 27. 免费网络监视器
- 28. Android监听ACTION_DOCK_EVENT
- 29. UDP监听套接字在网络配置更改后停止监听
- 30. 网络监测
嘿感谢它按预期工作 – Sam97305421562 2009-11-24 09:56:36
作为@noillusioin说,activeNetInfo可以为空。这表示如果您知道(保存状态)您之前连接了网络连接,则表示网络连接已断开。 – larham1 2013-04-18 21:10:28
您还需要检查NetworkInfo.isConnected – shuriquen 2015-04-18 21:25:21