1

アプリケーションでモバイル データが有効になっているかどうかを確認したい

これは、ボタンをクリックするだけで問題なく機能しますが、情報はクリック後に一度だけ更新され、「リアルタイム」で自動的には更新されません。

threadCheck = new Thread(new Runnable() {

        public void run() {
            // TODO Auto-generated method stub

                try {
                    setTextfield(isMobileDataEnabled());
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }

            }

    });



    this.startbutton.setOnClickListener(new OnClickListener() {

        public void onClick(View arg0) {

            threadCheck.run();

        }

    });

このスレッドを「ループ」させるための、最も CPU に優しい方法は何ですか? isMobileDataEnabled() を再帰的に呼び出そうとしましたが、スタックオーバーフロー エラーになりました。

敬具、ウルフェン

4

2 に答える 2

2

あなたの最善の策は、実際にはConnectivityManagerブロードキャストリスナーだと思います。ネットワークが利用可能か利用不可かを教えてくれます。放送に登録し、リスナーでボタンを更新します。このようにループはなく、CPUはほとんどアイドル状態のままです。ネットワークが変更されると、ポーリングを必要とせずに放送局に通知します。かなり速いので「リアルタイム」は気になりません;)

これらはあなたが始めるのに役立つはずです。

http://developer.android.com/reference/android/net/ConnectivityManager.html

http://developer.android.com/reference/android/content/BroadcastReceiver.html

public class MyActivity extends Activity {

   public void onCreate(Bundle b) {
      mButton = (Button) findViewById(R.id.button);
      registerReceiver(mBroadcastReceiver, new IntentFilter(ConnectivityMananger.CONNECTIVITY_ACTION));
      .....
   }
   BroadcastReceiver mBroadcastReceiver = new BroadcastReceiver() {
       public void onReceive(Context context, Intent intent) {
           if (ConnectivityMananger.CONNECTIVITY_ACTION.equals(intent.getAction()) {
                 boolean connectionLost = !intent.getBooleanExtra(ConnectivityManager.EXTRA_NO_CONNECTIVITY, false);
                 mButton.setText("Network Enabled:" + ! connectionLost);
                 // or whatever else you want to callback.
            }
       }
    };
于 2012-08-03T03:38:30.673 に答える
0
 public void run() {
            // TODO Auto-generated method stub

                try {

 while (isMobileDataEnabled()) {
             // do something in the loop
          }

 } catch (InterruptedException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }

            }

    });
于 2012-08-03T03:40:46.500 に答える