2012-05-17 47 views
1

我目前正在做一個android應用程序,檢查網絡可用性(無線& 3G)。 我有一個完美的工作在活動中的代碼。但我需要廣播接收器。我想在網絡可用時進行一些操作。 我有權限 android連接檢查

plz幫助我.....

的代碼如下......

ConnectivityManager cm = (ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE); 

if (cm.equals(ConnectivityManager.EXTRA_NO_CONNECTIVITY)) 
    { 

    Log.v("CONNECT", "CONNECTED"); 
    } 
else 
{ 
    Log.v("CONNECT", "NOT CONNECTED"); 

} 

`

回答

1

如果你有一個BroadcastReceiver類中聲明這樣:

public class NetConnectionBroadcastReceiver extends BroadcastReceiver 
{ 
    @Override 
    public void onReceive(Context context, Intent intent) 
    { 
     final ConnectivityManager cm = (ConnectivityManager) 
      context.getSystemService(Context.CONNECTIVITY_SERVICE); 
     final NetworkInfo networkInfo = cm.getActiveNetworkInfo(); 
     if (networkInfo == null) 
      Log.v("CONNECT", "NOT CONNECTED"); 
     int netType = networkInfo.getType(); 
     if (netType == ConnectivityManager.TYPE_WIFI) 
     { 
      Log.v("CONNECT", "CONNECTED TO WIFI"); 
     } 
     else if (netType == ConnectivityManager.TYPE_MOBILE) 
     { 
      Log.v("CONNECT", "CONNECTED TO MOBILE" + 
        (networkInfo.isRoaming() ? " ROAMING!" : "")); 
     } 
    } 
} 

你可以存儲一個實例它insinde您的活動,並在onCreate方法,你可以,如果爲android.net.conn.CONNECTIVITY_CHANGE註冊事件:

private final NetConnectionBroadcastReceiver receiver = 
     new NetConnectionBroadcastReceiver(); 
public void onCreate(Bundle savedInstanceState) 
{ 
    // ... your onCreate implementation goes here 
    final IntentFilter intentFilter = 
     new IntentFilter("android.net.conn.CONNECTIVITY_CHANGE"); 
    this.registerReceiver(this.receiver, intentFilter); 
} 

當數據連接的變化,你會得到一個名爲接收機的onReceive方法。你可以從內部檢查,發生了什麼樣的改變。

對於此項檢查,您不需要超過android.permission.ACCESS_NETWORK_STATE權限。

+0

很好的回答!做得好 。 – moujib

1

您應該作出BroadcastReceiver當連接狀態發生了變化

public class BroadCastSampleActivity extends Activity { 
    /** Called when the activity is first created. */ 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     // TODO Auto-generated method stub 
     super.onCreate(savedInstanceState); 
     this.registerReceiver(this.mConnReceiver, 
       new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION)); 
    } 
    private BroadcastReceiver mConnReceiver = new BroadcastReceiver() { 
     public void onReceive(Context context, Intent intent) { 
      boolean noConnectivity = intent.getBooleanExtra(ConnectivityManager.EXTRA_NO_CONNECTIVITY, false); 
      String reason = intent.getStringExtra(ConnectivityManager.EXTRA_REASON); 
      boolean isFailover = intent.getBooleanExtra(ConnectivityManager.EXTRA_IS_FAILOVER, false); 

      NetworkInfo currentNetworkInfo = (NetworkInfo) intent.getParcelableExtra(ConnectivityManager.EXTRA_NETWORK_INFO); 
      NetworkInfo otherNetworkInfo = (NetworkInfo) intent.getParcelableExtra(ConnectivityManager.EXTRA_OTHER_NETWORK_INFO); 

      if(currentNetworkInfo.isConnected()){ 
       Toast.makeText(getApplicationContext(), "Connected", Toast.LENGTH_LONG).show(); 
      }else{ 
       Toast.makeText(getApplicationContext(), "Not Connected", Toast.LENGTH_LONG).show(); 
      } 
     } 
    }; 
} 

,然後在AndroidManifest您可以檢查您是否已經連接將被觸發:

<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> 
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 

欲瞭解更多源代碼Download

-1
private boolean isNetworkAvailable() { 
     ConnectivityManager connectivityManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); 
     NetworkInfo activeNetworkInfo = connectivityManager 
       .getActiveNetworkInfo(); 
     return activeNetworkInfo != null; 
    }