在Android中使用后台线程之前,如何监控活动中的网络状态?

在Android中使用后台线程之前,如何监控活动中的网络状态?,android,Android,我是Android的新手。我需要在整个应用程序中检查网络连接,并在状态更改时通知用户网络状态。请告诉我如何处理一些示例代码。请提前感谢您可以使用RunNuithRead和ConnectionManager在固定时间后检查网络状态,并将消息显示为: private boolean mNetworkRunning=false; private ConnectivityManager connMgr; public void onCreate(Bundle savedInstanceState)

我是Android的新手。我需要在整个应用程序中检查网络连接,并在状态更改时通知用户网络状态。请告诉我如何处理一些示例代码。请提前感谢您可以使用RunNuithRead和ConnectionManager在固定时间后检查网络状态,并将消息显示为:

private boolean mNetworkRunning=false;
private  ConnectivityManager connMgr; 
 public void onCreate(Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);
 setContentView (R.layout.main);
 mClockRunning=true;
 NetworkStatusThread();
 }
   @Override
    protected void onDestroy() {
        super.onDestroy();
        // Stop Thread Here.
        mNetworkRunning=false;
    }  
 public void NetworkStatusThread(){
     Thread th=new Thread(){
    @Override
    public void run(){
     try
      {
       while(mNetworkRunning)
       {
         Thread.sleep(1000L);// set time here for refresh time in show update to user
        NetworkActivity.this.runOnUiThread(new Runnable() { 
         @Override
         public void run() {
         // TODO Auto-generated method stub
          if(mNetworkRunning)
           {
             boolean statu=isMobileNetworkAvailable();
             if(statu==true)
            Toast.makeText(YourCurrentActivity.this, "Network Available",Toast.LENGTH_LONG).show();
             else
             Toast.makeText(YourCurrentActivity.this, "Network Not Available",Toast.LENGTH_LONG).show();
           } 
          };
    }
    }catch (InterruptedException e) {
        // TODO: handle exception
    }
   }
 };
 th.start();
}

public  boolean isMobileNetworkAvailable(Context con){  
    if(null == connMgr){  
     connMgr = (ConnectivityManager)con.getSystemService(Context.CONNECTIVITY_SERVICE);  
    }  
    NetworkInfo wifiInfo = connMgr.getNetworkInfo(ConnectivityManager.TYPE_WIFI);  
    NetworkInfo mobileInfo = connMgr.getNetworkInfo(ConnectivityManager.TYPE_MOBILE);  
    if(wifiInfo.isAvailable()){  
        return true;  
    }else if(mobileInfo.isAvailable()){  
        return true;  
    }else{  
        return false;  
    }  
  }
第二个选项不使用线程,然后您可以注册一个用于连接的接收者。\u CHANGE Manifest.xml,如下所示:

< !-- Needed to check when the network connection changes -->   
< uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>   
< receiver android:name="you_package_name.ConnectionChangeReceiver"   
  android:label="NetworkConnection">   
< intent-filter>   
      < action android:name="android.net.conn.CONNECTIVITY_CHANGE"/>   
< /intent-filter>   
< /receiver>

谢谢你,伊姆兰。它帮了我很多。有什么解决方案可以在状态改变时通知状态而不使用任何thread@srinu:是使用查看我的编辑答案broadcastreceiver@srinu当前位置我只知道我告诉你的这两种方式。这可能有助于解决您的问题OK imran如何在我的活动中使用此连接ChangeReceiver如何在中显示toast网络状态更改时使用上述代码的每个活动?请尝试此活动我使用了一些静态代码,就像每次需要检查公共布尔值isMobileNetworkAvailableContext con{ifnull==connMgr{connMgr=ConnectivityManagercon.getSystemServiceContext.CONNECTIVITY_SERVICE;}时一样NetworkInfo wifiInfo=connMgr.getNetworkInfoConnectivityManager.TYPE_WIFI;NetworkInfo mobileInfo=connMgr.getNetworkInfoConnectivityManager.TYPE_MOBILE;ifwifiInfo.isAvailable{return true;}else ifmobileInfo.isAvailable{return true;}else{return false;}
public class ConnectionChangeReceiver extends BroadcastReceiver {  

    private static final String TAG =ConnectionChangeReceiver.class.getSimpleName();  

    @Override   
    public void onReceive(Context context, Intent intent) {   
    boolean success = false;   
    ConnectivityManager connManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);    
    State state = connManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI).getState();   
    //WIFI
    if (State.CONNECTED == state) {  
    success = true;   
    }   
    //GPRS
    state = connManager.getNetworkInfo(ConnectivityManager.TYPE_MOBILE).getState();  
    if (State.CONNECTED != state) {   
    success = true;   
    }   
    if (!success) {   
    Toast.makeText(context, "SHOW STATUS HERE", Toast.LENGTH_LONG).show();   
    }    
    }