2012-03-09 4 views
0

누군가가 Wi-Fi 액세스 포인트에 연결할 때 시작 및 중지, 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); 


} 

이 텐트 필터에 의해 호출이 메소드는 GET의 : 가장 좋은 방법은 시작 및 정지 시간을 기록 할 수 있도록

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

그러나이 무엇입니까? 비효율적 인 wait()입니까?

답변

0

wait()는 비효율적입니까?

예 예.

안드로이드에 대한 내용은 BroadcastReceiver입니다. 다음은 수행해야 할 작업입니다.

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의 다른 방송을 얻을 것이라고 생각 :

요청자에 대한 연결이 설정된 것으로 (그리고 와이파이 작업을 수행하는 것이 가능합니다) 또는 요청자에 대한 연결을 나타내는

방송 의도 행동 잃어 버렸습니다. 하나의 여분은 연결 상태를 부울로 제공합니다. 여기서 true는 CONNECTED를 의미합니다.

언제든지 추가로 연결을 시작했는지 또는 중지했는지 확인할 수 있습니다. 그렇게하면 앱이 시작과 중지 사이에서 실행될 필요가 없습니다.

관련 문제