Удаленное определение состояния подключения телефона Android

У меня есть телефон Android, который я использую на Page Plus. Я пытаюсь найти лучший способ удаленно определить (с веб-сервера Linux), подключено ли устройство к сети Wi-Fi.

Я хочу отключить переадресацию смс в своей учетной записи Google Voice, когда она не подключена к Wi-Fi, но, поскольку мой телефон не имеет подключения для передачи данных, это необходимо запускать удаленно. Я знаю, как запрограммировать функцию переключения настроек переадресации, мне просто нужно удаленно определить состояние Wi-Fi устройства Android.

Я предложил несколько идей, таких как мониторинг статуса gtalk телефона и определение того, находится ли клиент Android в сети - я могу заставить это работать, но это не самый чистый подход в мире.

Любые рекомендации или идеи? Я знаю, что это не совсем вопрос программирования, но мне бы не помешала помощь!


person xur17    schedule 11.04.2012    source источник
comment
Вы можете запустить код на клиенте (телефоне)?   -  person mfrankli    schedule 11.04.2012
comment
Да, я могу запускать код на клиенте. Я бы просто отключил в телефоне настройку переадресации при отключении Wi-Fi, но это невозможно, так как у меня нет доступа к сети после отключения от Wi-Fi.   -  person xur17    schedule 11.04.2012


Ответы (1)


Вы можете запустить фоновую службу на клиенте Android, которая пингует веб-сервер с постоянными интервалами времени всякий раз, когда подключен Wi-Fi — всякий раз, когда клиент пропускает «запланированную» регистрацию, веб-сервер делает вывод, что телефон отключен, и выполняет любые действия, которые вы хотите в таком случае.

Чтобы пропинговать сервер, я бы использовал простой сокет TCP:

// you could use IP address instead of the hostname if you don't have a domain name
// PORT_NUM is some value shared between the server and the client e.g. 3456
Socket sock = new Socket("mywebserverurl.com", PORT_NUM);
OutputStream out = sock.getOutputStream();
String data = getDataServerNeeds();
out.write(data.getBytes());
sock.close();

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

person mfrankli    schedule 11.04.2012
comment
Какие последствия для срока службы батареи это будет иметь? Будет ли один пинг в минуту сильно влиять на срок службы батареи? - person xur17; 11.04.2012
comment
вы, вероятно, могли бы провести эксперимент, чтобы проверить это более тщательно, но я полагаю, что один пинг в минуту при подключении к Wi-Fi окажет тривиальное влияние на время автономной работы. Учтите, что пока Wi-Fi подключен, ваш телефон обычно отправляет/принимает много данных, поэтому одно крошечное сообщение, вероятно, не будет убийцей. - person mfrankli; 11.04.2012
comment
Звучит как интересная идея - очевидно, я хочу минимальное использование данных для пинга - есть идеи о том, как лучше всего это сделать? HTTP будет иметь приличное количество накладных расходов - будет ли какое-то пользовательское соединение tcp иметь больше смысла? - person xur17; 11.04.2012
comment
Я бы просто открыл сокет TCP для сервера. Если серверу нужна информация от клиента, вы можете отправить эту минимальную информацию. Я отредактирую пример кода в ответ. - person mfrankli; 11.04.2012
comment
Спасибо за код - я работаю над тем, чтобы связать все вместе прямо сейчас. Я постараюсь отчитаться в каком-нибудь порту о влиянии этого на батарею. - person xur17; 11.04.2012