2012-03-09 6 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); 


} 

このインテントフィルタによって呼び出され、このメソッド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}のことをやっているのですか?

放送の意図サプリカントへの接続が確立されたことを示す行動(と、Wi-Fiの操作を実行できるようになりました)、またはサプリカントへの接続を:私はあなたがSUPPLICANT_CONNECTION_CHANGE_ACTIONの別の放送を得るだろうと思うだろう失われています。 1つの追加で接続状態がブール値として提供されます。真はCONNECTEDを意味します。

接続を開始したか停止したかを確認するたびに、余分にチェックするだけで済みます。そうすれば、あなたのアプリは起動と停止の間で実行される必要はありません。

関連する問題