2012-05-13 20 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で提案されているように、私はBroadcastReceiverでインターネット活動を監視するのにthis tutorialをフォローしていますが、noConnectivityがtrueの場合はAlertDialogを表示しようとしていますが、何も起こりません。

これは上記のチュートリアルを使用して、私のコードです:

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から各アクティビティを拡張します。

は、場合にあなたがフラグメント

関連する問題