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 回答