получать уведомления, когда пользователи подключаются к точке доступа WIFI

Я хочу определить подключение к моей точке доступа. Я хочу получать уведомления, когда пользователи подключаются. Я знаю, что могу запросить таблицу arp (/proc/net/arp) , из которой я могу найти подключенных пользователей. Вот пример кода:

public static ArrayList<ClientScanResult> getClientList() {
    BufferedReader br = null;
    ArrayList<ClientScanResult> result = null;

    try {
        result = new ArrayList<ClientScanResult>();
        br = new BufferedReader(new FileReader("/proc/net/arp"));
        String line;
        while ((line = br.readLine()) != null) {
            String[] splitted = line.split(" +");
            Log.d("Debug:line=", line);
            if ((splitted != null) && (splitted.length >= 4)) {
                // Basic sanity check
                String mac = splitted[3];

                if (mac.matches("..:..:..:..:..:..")) {
                    result.add(new ClientScanResult(splitted[0], splitted[3], splitted[5]));
                }
            }
        }
    } catch (Exception e) {
        e.printStackTrace();
    } finally {
        try {
            br.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    return result;
}

Вопрос: есть ли лучший способ сделать это, кроме просмотра arp-таблицы каждые n секунд?

UPD: Если подключиться к точке доступа, а потом отключиться, то запись все равно будет в arp-таблице. То есть до тех пор, пока я не смогу получить список всех подключенных пользователей


person cska631    schedule 03.01.2014    source источник
comment
Разрешение состояния Wi-Fi в манифесте   -  person learner    schedule 04.01.2014
comment
@Бупати. Да. Он был там   -  person cska631    schedule 04.01.2014
comment
дать разрешение для Wi-Fi в вашем приложении   -  person learner    schedule 04.01.2014
comment
@Boopathi '‹использует-разрешение android:name=android.permission.ACCESS_WIFI_STATE/› ‹использует-разрешение android:name=android.permission.CHANGE_WIFI_STATE/› ‹использует-разрешение android:name=android.permission.ACCESS_NETWORK_STATE/› ‹использует -permission android:name=android.permission.INTERNET/› ‹uses-permission android:name=android.permission.ACCESS_WIFI_STATE/› ‹uses-permission android:name=android.permission.CHANGE_WIFI_MULTICAST_STATE/› ‹uses-permission android:name =android.permission.CHANGE_WIFI_STATE/›'   -  person cska631    schedule 04.01.2014


Ответы (1)


Вы можете добавить BroadcastReciever в состояние подключения. http://developer.android.com/training/monitoring-device-state/connectivity-monitoring.html

person Chen Kinnrot    schedule 03.01.2014
comment
И тогда я смогу определить при подключении к моей точке доступа? - person cska631; 04.01.2014
comment
Я обнаружил только один BroadcastReciever, связанный с точкой доступа (WIFI_AP_STATE_CHANGED_ACTION). И он только отслеживает состояние точки доступа, а я хочу состояние подключения к точке доступа - person cska631; 04.01.2014
comment
Это триггер для запуска вашего кода... вместо того, чтобы запускаться каждые несколько секунд. - person Chen Kinnrot; 04.01.2014
comment
Вы не могли бы объяснить? Я поймаю это действие? - person cska631; 04.01.2014
comment
Заметил, что через момент подключения в логах пишет I/hostapd﹕wlan0:AP-STA-CONNECTED 00:21:e9:dc:07:85 - person cska631; 04.01.2014
comment
Вы можете зарегистрировать получателя для этого действия, а затем выполнить свой код, чтобы проверить, подключен ли пользователь к вашей точке доступа. - person Chen Kinnrot; 05.01.2014
comment
Вот в чем проблема. не могу найти нужное действие - person cska631; 05.01.2014