2012-05-17 3 views
1

В настоящее время я делаю приложение для Android, которое проверяет доступность сети (как wifi & 3G). У меня есть код, который отлично работает в действии. но мне это нужно в широковещательном приемнике. Я хочу выполнять некоторые операции, когда сеть доступна. у меня есть разрешение android connection check check

плз помочь мне .....

код приводится ниже ...

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; 
    } 
Смежные вопросы