Дистанционно откриване на състоянието на връзката на телефон с Android

Имам телефон с Android, който използвам на Page Plus. Опитвам се да разбера най-добрия начин за отдалечено откриване (от уеб сървър на linux) дали устройството е свързано към wifi мрежа или не.

Искам да деактивирам препращането на SMS в моя акаунт в Google Voice, когато не съм свързан с wifi, но тъй като телефонът ми няма връзка за данни, това трябва да се задейства дистанционно. Знам как да програмирам функцията за превключване на настройката за препращане, просто трябва да открия дистанционно wifi състоянието на устройството с Android.

Хвърлих няколко идеи, като например наблюдение на състоянието на gtalk на телефона и откриване дали android клиентът е онлайн - мога някак си да накарам това да работи, но това не е най-чистият подход в света.

Някакви препоръки или идеи? Знам, че това не е точно програмен въпрос, но ще се радвам на помощ!


person xur17    schedule 11.04.2012    source източник
comment
можете ли да стартирате код на клиента (телефон)?   -  person mfrankli    schedule 11.04.2012
comment
Да, мога да изпълнявам код на клиента. Просто бих накарал телефона да деактивира самата настройка за препращане при прекъсване на връзката с wifi, но това е невъзможно, тъй като нямам достъп до мрежата след прекъсване на връзката с wifi.   -  person xur17    schedule 11.04.2012


Отговори (1)


Можете да стартирате фонова услуга на клиента на Android, която пингва уеб сървъра на постоянни интервали от време, когато wifi е свързан - всеки път, когато клиентът пропусне "планирано" регистриране, уеб сървърът заключава, че телефонът е прекъснат, и изпълнява каквито искате действия в този случай.

За ping на сървъра бих използвал обикновен 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
вероятно бихте могли да проведете експеримент, за да проверите това по-стриктно, но бих си представил, че едно ping на минута, докато сте свързани с wifi, би имало тривиално въздействие върху живота на батерията. имайте предвид, че докато wifi е свързан, телефонът ви обикновено изпраща/получава много данни, така че едно малко съобщение вероятно няма да бъде убийствено. - 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