2012-05-13 2 views
1

Я проверяю подключение устройства, как предложено в this question со следующим кодом:Мониторинг подключения к Интернету каждый раз, когда приложение открывается в андроида

final ConnectivityManager conMgr = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); 
final NetworkInfo activeNetwork = conMgr.getActiveNetworkInfo(); 
if (activeNetwork != null && activeNetwork.getState() == NetworkInfo.State.CONNECTED) { 
    //notify user you are online 
} else { 
    //notify user you are not online 
} 

У меня есть это в моей основной деятельности и она отлично работает, но то, что я теперь нужно проверить подключение к Интернету каждый раз, когда приложение запускается, иногда приложение остается в каком-то состоянии, а затем отключается Интернет, поэтому, когда он снова открывается, он не проходит через основное действие, поэтому ничего не проверяется ,

Как было предложено в this question Я следил за this tutorial по мониторингу активности в Интернете с помощью BroadcastReceiver, и я пытаюсь отобразить и AlertDialog, когда noConnectivity - это правда, но ничего не происходит.

Это мой код, используя учебник, упомянутых выше:

public class MyActivity extends Activity { 

    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.welcome); 

    registerReceivers() ; 
     (..my activity code goes here...) 

} 

    private void noInternet() 
    { 
     Intent myIntent = new Intent(this, NoInternetActivity.class); 
     startActivity(myIntent); 
    } 

    /* 
    * method to be invoked to register the receiver 
    */ 
    private void registerReceivers() {  
     registerReceiver(mConnReceiver, 
      new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION)); 
    } 

    private void alert() 
    { 
     AlertDialog alertDialog = new AlertDialog.Builder(this).create(); 
     alertDialog.setTitle("internet connection"); 
     alertDialog.setMessage("To use this app you need intenet connection"); 
     alertDialog.setButton("ok", new DialogInterface.OnClickListener() { 
      public void onClick(DialogInterface dialog, int which) { 
       // here you can add functions 
      } 
     }); 
     alertDialog.show(); 
    } 

    private BroadcastReceiver mConnReceiver = new BroadcastReceiver() { 
     @Override 
     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); 

      // do application-specific task(s) based on the current network state, such 
      // as enabling queuing of HTTP requests when currentNetworkInfo is connected etc. 

      if(noConnectivity) 
      { 
       alert(); 
       noInternet(); 
      } 

     } 
    }; 
} 

но ни alert() или noInternet() увольняют вверх.

Надеюсь, вы можете мне помочь.

ответ

1

Если вы хотите запускать код каждый раз, когда ваша активность возобновляется, даже если она уже открыта, переопределите и поместите код проверки внутри onResume(). Это вызывается каждый раз, когда открывается действие.

+0

но я должен сделать это в любой деятельности, у меня есть? – marimaf

+0

Если вам нужно иметь возможность подключения во всех действиях, я могу это сделать. Будет ли это сложно или проблематично? – Tim

+0

Я бы сказал, что 95% моих классов активности требуют подключения, поскольку они получают динамический контент с сервера. Я не чувствую, что добавить это к каждому действию - лучшее решение, но я мог бы сделать это, если не найду лучшего. благодаря – marimaf

1

В вашем случае вы перемещаете этот registerReceivers в onStart или onResume.

Теперь, если вы хотите иметь его в каждом действии, создайте базовую активность [BaseActivity], которая расширяет активность и помещает этот метод в onStart или onResume в этом базовом классе. Теперь расширьте все ваши действия из этой BaseActivity.

Будьте осторожны, что вы не поставите их в методы жизненного цикла Фрагмент, в случае, если вы используете фрагменты

 Смежные вопросы

  • Нет связанных вопросов^_^