2012-03-09 56 views
0

所以有人問我爲他寫了一個應用程序,當他連接到WiFi接入點時,日誌開始和停止,bssid,本地ip,ssid和開始/停止時間。Android:等待一個行動

我這樣做的:

public void onReceive(Context context, Intent intent) { 
    ConnectivityManager connManager = (ConnectivityManager) context 
      .getSystemService(Context.CONNECTIVITY_SERVICE); 
    NetworkInfo mWifi = connManager 
      .getNetworkInfo(ConnectivityManager.TYPE_WIFI); 
    TelephonyManager telephonyManager = (TelephonyManager)context.getSystemService(Context.TELEPHONY_SERVICE); 

    if (mWifi.isConnected()) { 
     WifiManager wifiManager = (WifiManager) context 
       .getSystemService(Context.WIFI_SERVICE); 
     android.net.wifi.WifiInfo wifiInfo = wifiManager 
       .getConnectionInfo(); 

     SSID = wifiInfo.getSSID(); 
     BSSID = wifiInfo.getBSSID(); 
     localIp = getLocalIpAddress(); 
     Log.d("WIFI SSID",SSID); 
     Log.d("WIFI MAC", BSSID); 
     Log.d("WIFI IP", localIp); 



     this.startDate = c.getTime(); 

    } 

    while(mWifi.isConnected()){ 
     try { 
      wait(); 
     } catch (InterruptedException e) { 

      e.printStackTrace(); 
     } 

    } 
    this.stopDate = c.getTime(); 

    db.insertWifiInfo(SSID, BSSID,telephonyManager.getDeviceId(), localIp, startDate, stopDate); 


} 

這種方法獲取的這個意圖過濾叫做:

<intent-filter> 
     <action android:name="android.net.wifi.WifiManager.SUPPLICANT_CONNECTION_CHANGE_ACTION" > 
     </action> 
    </intent-filter> 

但是這是最好的辦法是能夠登錄啓動和停止的時間?等待()效率低下嗎?

回答

0

is wait()inefficient?

是的,這完全沒有錯。

閱讀關於BroadcastReceiver在android中的支持。以下是你需要做的事情:

protected void onResume() 
{ 
    super.onResume(); 

    IntentFilter intentFilter = new IntentFilter(); 

    intentFilter.addAction("android.net.wifi.WIFI_STATE_CHANGED"); 

    registerReceiver(myReceiver, intentFilter); 
} 

private BroadcastReceiver myReceiver = new BroadcastReceiver(){ 
    @Override 
    public void onReceive(Context context, Intent intent) { 
     String str = intent.getAction(); 

     displayMessage("In myReceiver, action = " + str); 
     Log.d("Settings", "Received action: " + str); 

     if (str.equals("android.net.wifi.WIFI_STATE_CHANGED")) 
      displayMessage("wifi changed..."); 

}}; 
0

爲什麼還要那麼做while(connected){wait}的事?我想你會得到的SUPPLICANT_CONNECTION_CHANGE_ACTION另一個廣播:

廣播意圖的行動表明該方的連接已經建立(和它現在可以執行Wi-Fi操作)或請求者的連接已經丟失。一個額外的提供了連接狀態作爲布爾值,其中真正意味着連接。

您可以每次檢查一次,看看您是否啓動或停止連接。這樣,您的應用程序甚至不必在啓動和停止之間運行。