networking监听器Android

我想检查Android手机的networking何时closures。 我可以捕捉该事件吗?

我没有得到适当的API或任何可以解释相同的例子。 如果有人已经做了或任何示例链接将是真正有帮助的。

  • 确保Web服务请求
  • 在Android上检测wifi的IP地址?
  • BroadcastReceiver接收一个事件的多个相同的消息
  • 如何制作多人游戏
  • 如何在网页上的主屏幕上添加android书签?
  • Android获取热点提供设备的IP地址
  • Android致命信号11(SIGSEGV)在0x00000040(代码= 1)错误
  • 如何在运行时validation已安装的应用程序以防止钓鱼攻击?
  • 新的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(); } } } 

    在“manifest”元素下的AndroidManifest.xml中添加新的xml:

     <!-- Needed to check when the network connection changes --> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/> 

    在你的AndroidManifest.xml文件中的“application”元素下新build一个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> 

    我一直在使用一个小的设置来检查带宽,以确定如何缩放事物,如图像。

    在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 } 

    这不是最漂亮的,但是它具有足够的灵活性,可以根据它们和我对它们的要求来改变项目的带宽截止值。

    如果使用Android注释是一个选项,你可以在你的活动中试试这个 – 剩下的就是这样:

     @Receiver(actions = ConnectivityManager.CONNECTIVITY_ACTION, registerAt = Receiver.RegisterAt.OnResumeOnPause) void onConnectivityChange() { //react } 

    只有当你已经使用AndroidAnnotations时才使用它 – 把这个依赖关系放在你的项目里面只是为了这段代码而已。

    以上的答案只适用于移动分组数据启用。 否则,ConnectivityManager将为空,您不能再检索NetworkInfo。 解决方法是使用PhoneStateListener或TelephonyManager。