1

OK、Androidがwifiアダプターを完全に有効にするまで待つ必要があるプログラムがあります。私はこのアクティビティコードを持っていて動作しますが、正直なところ、これはいくつかのタスクが完了するのを待つ適切な方法ではないと思います (この場合、Android は wifi を有効にする必要があります)。

public class MainActivity extends Activity implements Runnable {

ProgressDialog pd;
WifiManager wm;


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    wm = (WifiManager) getSystemService(WIFI_SERVICE);

    if(!wm.isWifiEnabled()) {
    pd = ProgressDialog.show(this, "Stand by", "Doing work");

    Thread t = new Thread(this);
    t.start();
    }


}




@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.activity_main, menu);

    return true;
}






@Override
public void run() {

    wm.setWifiEnabled(true);
    while(wm.getWifiState() != 3) {

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

    }


    pd.dismiss();
    }
}

あるタスクが終了するまでプログラムの実行を待機する適切な方法を教えてください。プログラムのシナリオ:

  1. wifi が無効になっている場合は、if ステートメントを実行します (進行状況ダイアログを表示し、wifi を有効にします)。
  2. タスクが完了するまで進行状況ダイアログを表示します (この場合、wifi は完全に有効になります)。
  3. Wi-Fi が有効になっている場合、進行状況ダイアログの表示を停止します

前もって感謝します!

4

4 に答える 4

1

AsyncTask のサブクラスです。これは、まさに AsyncTask が作成された種類のものです。

http://developer.android.com/reference/android/os/AsyncTask.html

于 2013-01-16T12:24:44.327 に答える
0

これには AsyncTask を使用します。OnPreExecute() で進行状況バーを表示し、doInBackground() で読み込みプロセスまたは時間を必要とする何かを実行し、最後に onPostExecute() で進行状況ダイアログを閉じます。これが作業サンプルです-

http://huah.com/android-progress-bar-and-thread-updating/

それがあなたを助けることを願っています

于 2013-01-16T12:58:02.957 に答える
0

このようなものが動作します:

    if(!wm.isWifiEnabled()) {

        pd = ProgressDialog.show(this, "Stand by", "Doing work");
        WifiManager wifiManager = (WifiManager)getBaseContext().getSystemService(Context.WIFI_SERVICE);
        wifiManager.setWifiEnabled(true);

    }

public void testWifi(){


  WifiManager wifi = (WifiManager)getSystemService(Context.WIFI_SERVICE);
  if (wifi.isWifiEnabled()){
    pd.dismiss();
    //continue code
  }else{
    new Handler().postDelayed(new Runnable() {
      testWifi();
    } , 200);
  }
}
于 2013-01-16T12:27:58.257 に答える
0

AsyncTask の使用:

private class MyTask extends AsyncTask<URL, Integer, Long> {

   private Context context;

   public MyTask(Context context) {
     this.context = context;
   }

   protected void onPreExecute() {
      progressDialog = ProgressDialog.show(context, "", "msg", true); 
   }

  protected Long doInBackground(URL... urls) {
       //do something
  }

 protected void onPostExecute(Long result) {
     progressDialog.dismiss();  
 }
}
于 2013-01-16T12:25:39.313 に答える