2012-04-20 69 views
0

我使用下面的代碼連接到一個wifi網絡。有沒有辦法可以延遲textview文本的輸出,以便它不會顯示,直到它連接到WiFi?消息在實際連接之前即將到來。如何延遲textview輸出?

import java.util.List; 
import android.app.Activity; 
import android.os.Bundle; 
import android.content.Context; 
import android.net.ConnectivityManager; 
import android.net.NetworkInfo; 
import android.net.wifi.WifiConfiguration; 
import android.net.wifi.WifiManager; 
import android.util.Log; 
import android.view.View; 
import android.view.View.OnClickListener; 

import android.widget.Button; 
import android.widget.TextView; 

public class TestActivity extends Activity { 
/** Called when the activity is first created. 
* @return */ 



@Override 
public void onCreate(Bundle savedInstanceState) {  
    super.onCreate(savedInstanceState);   


    setContentView(R.layout.main); 
    Button OffWifi = (Button)findViewById(R.id.offwifi); 
    OffWifi.setOnClickListener(new OnClickListener() { 
     public void onClick(View v) { 

      WifiManager wifiManager = (WifiManager)getBaseContext().getSystemService(Context.WIFI_SERVICE); 
      wifiManager.setWifiEnabled(false);   
      }   
     }); 


    TextView tv= (TextView) findViewById(R.id.tv); 

    WifiManager wifi = (WifiManager) getSystemService(Context.WIFI_SERVICE); 
    WifiConfiguration wc = new WifiConfiguration(); 
    wc.SSID = "\"Test\""; //IMP! This should be in Quotes!! 

    wc.hiddenSSID = true; 
    wc.status = WifiConfiguration.Status.ENABLED;  
    wc.priority = 10; 
    wc.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.WPA_PSK); 
    wc.allowedProtocols.set(WifiConfiguration.Protocol.RSN); 
    wc.allowedProtocols.set(WifiConfiguration.Protocol.WPA); 
    wc.allowedAuthAlgorithms.set(WifiConfiguration.AuthAlgorithm.OPEN); 
    wc.allowedAuthAlgorithms.set(WifiConfiguration.AuthAlgorithm.SHARED); 
    wc.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.CCMP); 
    wc.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.TKIP); 
    wc.preSharedKey = "\"Password\""; 
    WifiManager wifiManag = (WifiManager) this.getSystemService(WIFI_SERVICE); 
    boolean res1 = wifiManag.setWifiEnabled(true); 
    int res = wifi.addNetwork(checkPreviousConfiguration(wc)); 
    Log.d("WifiPreference", "add Network returned " + res); 
    boolean es = wifi.saveConfiguration(); 
    Log.d("WifiPreference", "saveConfiguration returned " + es); 
    boolean b = wifi.enableNetwork(res, true);  
    Log.d("WifiPreference", "enableNetwork returned " + b); 



     ConnectivityManager connec = (ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE); 

     if (connec != null && (connec.getNetworkInfo(1).getState() == NetworkInfo.State.CONNECTED) ||(connec.getNetworkInfo(0).getState() == NetworkInfo.State.CONNECTED)){ 

      tv.setText("You are now connected! " + "Version 1.1"); 
      }else if (connec.getNetworkInfo(0).getState() == NetworkInfo.State.DISCONNECTED || connec.getNetworkInfo(1).getState() == NetworkInfo.State.DISCONNECTED) {    

       tv.setText("The was an error connecting, please try again."); 
      } 

    }  




public WifiConfiguration checkPreviousConfiguration(WifiConfiguration wc) { 
WifiManager wifi = (WifiManager) getSystemService(Context.WIFI_SERVICE); 
List<WifiConfiguration> configs = wifi.getConfiguredNetworks();  
    for(WifiConfiguration config : configs) {   
     if(config.SSID.equals(wc.SSID)) return config;  
     }  
    return wc; 
    } 

} 

回答

1

使用AsyncTask,並把連接在doInBackgroundsetText投入onPostExecute

public class Connect extends AsyncTask<String, Void, Boolean> { 

private Activity activity; 
private Context context; 

public LoadContacts(Activity activity){ 
    this.activity=activity; 
    context = activity; 
} 

@Override 
protected void onPreExecute() { 
    // TODO Auto-generated method stub 
    super.onPreExecute(); 

} 

@Override 
protected void onPostExecute(Boolean result) { 
    TextView tv= (TextView) activity.findViewById(R.id.tv); 
    if (connec != null && (connec.getNetworkInfo(1).getState() == NetworkInfo.State.CONNECTED) ||(connec.getNetworkInfo(0).getState() == NetworkInfo.State.CONNECTED)){ 

     tv.setText("You are now connected! " + "Version 1.1"); 
     }else if (connec.getNetworkInfo(0).getState() == NetworkInfo.State.DISCONNECTED || connec.getNetworkInfo(1).getState() == NetworkInfo.State.DISCONNECTED) {    

      tv.setText("The was an error connecting, please try again."); 
     } 
    super.onPostExecute(); 
} 

@Override 
protected Boolean doInBackground(String... params) { 
    WifiManager wifi = (WifiManager) activity.getSystemService(Context.WIFI_SERVICE); 
WifiConfiguration wc = new WifiConfiguration(); 
wc.SSID = "\"Test\""; //IMP! This should be in Quotes!! 

wc.hiddenSSID = true; 
wc.status = WifiConfiguration.Status.ENABLED;  
wc.priority = 10; 
wc.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.WPA_PSK); 
wc.allowedProtocols.set(WifiConfiguration.Protocol.RSN); 
wc.allowedProtocols.set(WifiConfiguration.Protocol.WPA); 
wc.allowedAuthAlgorithms.set(WifiConfiguration.AuthAlgorithm.OPEN); 
wc.allowedAuthAlgorithms.set(WifiConfiguration.AuthAlgorithm.SHARED); 
wc.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.CCMP); 
wc.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.TKIP); 
wc.preSharedKey = "\"Password\""; 
WifiManager wifiManag = (WifiManager) context.getSystemService(WIFI_SERVICE); 
boolean res1 = wifiManag.setWifiEnabled(true); 
int res = wifi.addNetwork(checkPreviousConfiguration(wc)); 
Log.d("WifiPreference", "add Network returned " + res); 
boolean es = wifi.saveConfiguration(); 
Log.d("WifiPreference", "saveConfiguration returned " + es); 
boolean b = wifi.enableNetwork(res, true);  
Log.d("WifiPreference", "enableNetwork returned " + b); 



    ConnectivityManager connec = (ConnectivityManager) activity.getSystemService(Context.CONNECTIVITY_SERVICE); 

    return true; 
} 

} 

測試活動應該是這樣的:

public class TestActivity extends Activity { 
/** Called when the activity is first created. 
* @return */ 

@Override 
public void onCreate(Bundle savedInstanceState) {  
super.onCreate(savedInstanceState);   


setContentView(R.layout.main); 

new Connect(this).execute(); 
} 

代碼並沒有進行測試,並可能有一些錯誤,但我希望你明白...

+0

我正要回答相同的+1 ... – 2012-04-20 17:30:37

+0

我d不要以爲這些函數調用hes用來連接WIFI的任何保證都會同步發生 – JRaymond 2012-04-20 17:34:02

+0

好吧我嘗試了代碼,但現在我得到一個錯誤04-20 17:35:46.191:E/AndroidRuntime(338): java.lang.RuntimeException:執行doInBackground()時發生錯誤 – user1342164 2012-04-20 17:35:34