Android:等待行动

时间:2012-03-09 20:55:19

标签: android wait

所以有人让我为他写一个应用程序,当他连接到WiFi接入点时,日志开始和停止,bssid,本地ip,ssid和开始/停止时间。

我是这样做的:

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过滤器调用:

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

然而,这是能够记录开始和停止时间的最佳方法吗?等待()效率低下吗?

2 个答案:

答案 0 :(得分:0)

  

等待()效率低吗?

是的,这完全没错。

阅读android中的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...");

}};

答案 1 :(得分:0)

为什么要这样做while(connected){wait}呢?我想你会再收到SUPPLICANT_CONNECTION_CHANGE_ACTION的广播:

  

广播意图动作,指示已建立与请求方的连接(现在可以执行Wi-Fi操作)或与请求方的连接已丢失。一个额外提供连接状态作为布尔值,其中true表示连接。

您可以每次检查额外的内容,看看您是否已启动或停止连接。这样你的应用甚至不必在开始和停止之间运行。