2014-01-09 60 views
0

我有一个关于android中的NetworkListener的问题。BroadcastReceiver没有给出任何结果

我已经实现了一个新的类来监听是否有可用的互联网连接(数据和无线网络)。

的代码如下:

package com.gelliesmedia.thumbqoo.services; 
public class NetworkStateReceiver extends BroadcastReceiver { 
    @SuppressWarnings("deprecation") 
    public void onReceive(Context context, Intent intent) { 
     Log.d("THUMBQOO","Network connectivity change"); 

     if(intent.getExtras()!=null) { 
      NetworkInfo ni=(NetworkInfo) intent.getExtras().get(ConnectivityManager.EXTRA_NETWORK_INFO); 

      if(ni!=null && ni.getState()==NetworkInfo.State.CONNECTED) { 
       Log.i("THUMBQOO","Network "+ni.getTypeName()+" connected"); 
      } 
     } 
     if(intent.getExtras().getBoolean(ConnectivityManager.EXTRA_NO_CONNECTIVITY,Boolean.FALSE)) { 
      Log.d("THUMBQOO","There's no network connectivity"); 
     } 
    } 
} 

这我怎么在清单中注册:

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 
<receiver android:name="com.gelliesmedia.thumbqoo.services.NetworkStateReceiver"> 
    <intent-filter> 
     <action android:name="android.net.conn.CONNECTIVITY_CHANGE" /> 
    </intent-filter> 
</receiver> 

当我测试使用模拟器(genymotion)它不给我任何消息即使我拔掉了我的PC LAN电缆。

我必须在所有Activity类中使用NetworkStateReceiver类吗?

Public class MainActivity extends MainActivity{ 
    onCreate(...) 
    NetworkStateReceiver x = new NetworkStateReceiver(); <--- like this? 
} 

我必须人在这里做什么?任何人都可以指点我一个正确的方向?

+0

测试它在真实设备上。标准模拟器不支持网络状态,Genymotion在推广其“产品”方面做了大量工作。 – 323go

回答

0

试试这个方法:

public class NetworkReciver extends BroadcastReceiver { 

    @Override 
    public void onReceive(Context context, Intent arg1) { 
     // TODO Auto-generated method stub 
     ConnectivityManager connectivityManager = (ConnectivityManager) context 
       .getSystemService(Context.CONNECTIVITY_SERVICE); 
     NetworkInfo activeNetInfo = connectivityManager 
       .getNetworkInfo(ConnectivityManager.TYPE_MOBILE); 
     boolean isConnected = activeNetInfo != null 
       && activeNetInfo.isConnectedOrConnecting(); 

     GeneralClass.isHaveInternet = isConnected ? true : false; 
     if (isConnected) 

      Log.e("NET-------------->", "connecte" + isConnected); 

     else 
      Log.e("NET------------->", "not connecte" + isConnected); 
    } 
} 

来检查应用程序的连接。

if (GeneralClass.isHaveInternet) 

       Log.e("NET-------------->", "connecte" + isConnected); 

      else 
       Log.e("NET------------->", "not connecte" + isConnected); 

其中GeneralClass.isHaveInternet为public static boolean isHaveInternet = true;