2012-03-09 2 views
0

Так что кто-то попросил меня написать для него приложение, в котором запускаются и останавливаются журналы, bssid, local ip, ssid и время начала/остановки, когда он подключается к точке доступа WiFi.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> 

Однако есть это лучший способ, чтобы иметь возможность войти время начала и окончания? Неужели wait() неэффективен?

ответ

0

Ожидание() неэффективно?

Да, это совершенно не так.

Подробнее о 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:

Broadcast цель действия, указывающее, что соединение с запрашивающим было установлено (и теперь можно выполнять операции Wi-Fi) или подключение к запрашивающей был потерян. Один дополнительный параметр обеспечивает состояние соединения как логическое, где true означает CONNECTED.

Вы можете просто проверить это дополнительно каждый раз, чтобы узнать, начали ли вы или остановили соединение. Таким образом, ваше приложение даже не должно запускаться между запуском и остановкой.

Смежные вопросы