Android: в ожидании действий - PullRequest
0 голосов
/ 10 марта 2012

Итак, кто-то попросил меня написать приложение для него, которое регистрирует запуск и остановку, bssid, локальный ip, ssid и время запуска / остановки, когда он подключается к точке доступа WiFi.

Я сделал это:

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 () неэффективен?

Ответы [ 2 ]

0 голосов
/ 10 марта 2012

Зачем делать это while(connected){wait} вещь?Я бы подумал, что вы получите еще одну трансляцию SUPPLICANT_CONNECTION_CHANGE_ACTION:

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

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

0 голосов
/ 10 марта 2012

Является ли wait () неэффективным?

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

Читайте о 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...");

}};
...