как проснуться на удаленном компьютере с помощью службы сообщений, предоставляемой Android?

возможно ли создать приложение для Android, которое всегда работает в фоновом режиме и продолжает прослушивать сообщение с определенного номера мобильного телефона в определенном формате и предпринимать необходимые действия? Это идея, которая у меня есть, чтобы разбудить удаленный компьютер (см. предыдущий вопрос). Для этой цели мне нужно использовать 2 телефона Android, телефон A и телефон B. B находится в удаленном месте и всегда подключен к беспроводной сети через Wi-Fi. Он продолжает прослушивать сообщение от A (SMS от A). Теперь, если A отправляет сообщение типа «WAKE ON PC EE:00:B3:2F:56:12 password» на B, то B должен проанализировать это сообщение в фоновом режиме и отправить волшебный пакет на компьютер с определенным MAC-адресом. Это просто идея. Можно ли создать такое приложение?

initial setup:

        wired               wired    
modem------------router--------------PC(mac:EE:00:B3:2F:56:12)
                   |
                   |
                   |
                 wireless
                   |
                   |
                   |
                   ------------------android phone(B)  

привет, возможно ли отправлять сообщения между двумя приложениями в Android (то есть в приведенной выше проблеме вместо отправки сообщения в папку «Входящие» A может ли A отправить сообщение конкретному приложению, работающему в B, кроме папки «Входящие»?) ?


person vij    schedule 27.05.2012    source источник
comment
И телефоны Android будут иметь доступ к локальной сети ПК... как? Если ваш телефон не поддерживает USB-адаптер Ethernet, вы не получите доступ к локальной сети.   -  person Marc B    schedule 27.05.2012
comment
@MarcB: Если ПК подключен через Ethernet к беспроводному маршрутизатору, а телефон находится в той же сети Wi-Fi, они смогут общаться, верно?   -  person xbonez    schedule 27.05.2012
comment
пожалуйста, смотрите мой отредактированный вопрос   -  person vij    schedule 27.05.2012
comment
вы можете выполнять код всякий раз, когда приходит смс по следующей ссылке .com/questions/1944102/   -  person Nitin    schedule 27.05.2012


Ответы (1)


Для части прослушивателя SMS вы можете использовать BroadcastReceiver и читать из своего Pdus следующим образом:

public class SmsController extends BroadcastReceiver {

@Override
public void onReceive(Context context, Intent intent) {
    this.c=context;
    SmsMessage msgs[] = null;
    Bundle bundle = intent.getExtras();
    try {
        Object pdus[] = (Object[]) bundle.get("pdus");
        msgs = new SmsMessage[pdus.length];
        for (int n = 0; n < pdus.length; n++) {
            byte[] byteData = (byte[]) pdus[n];
            msgs[n] = SmsMessage.createFromPdu(byteData);
        }
    } catch (Exception e) {

    }
    for (int i = 0; i < msgs.length; i++) {
        String message = msgs[i].getDisplayMessageBody();
        if (message != null && message.length() > 0) {
            String from = msgs[i].getOriginatingAddress();
            if(message.contains("your code")){
                if(message.contains("MAC ADRESSE")){
                    controlRemotePC();
                } 
            }
        }
    }
    abortBroadcast();
}
}

manifest.xml: добавлено это разрешение и получатель.

 <uses-permission android:name="android.permission.WRITE_SMS" />
 <uses-permission android:name="android.permission.READ_SMS" />
 <uses-permission android:name="android.permission.RECEIVE_SMS" />

 <receiver android:name=".SmsController" >
        <intent-filter android:priority="999" >
            <action android:name="android.provider.Telephony.SMS_RECEIVED" />
        </intent-filter>
 </receiver>
person 113408    schedule 27.05.2012
comment
привет, возможно ли отправлять сообщения между двумя приложениями в Android (то есть в вышеуказанной проблеме вместо отправки сообщения в папку «Входящие» A может ли A отправить сообщение конкретному приложению, работающему на этом телефоне?)? - person vij; 27.05.2012
comment
Да, это. в вашем приложении вы должны установить в манифесте приоритет вашего широковещательного приемника на 999. вы также можете использовать brodcastreceiver.abort(), чтобы не показывать его в своих почтовых ящиках. Только ваше приложение получит ваше SMS - person 113408; 28.05.2012
comment
Привет, стоит отметить, что приложение должно автоматически запускаться, когда пользователь включает мобильный телефон, и пользователь не должен иметь никакого контроля над приложением. То есть если сообщение получено, сообщение должно быть прочитано, проведена какая-то работа и сообщение должно быть удалено. Если какой-то пользователь в удаленном месте использует мобильный телефон, на первый взгляд, пользователь не должен ничего информировать о запущенном фоновом приложении. возможно ли разработать такое приложение? - person vij; 28.05.2012
comment
Да, это. когда вы abort() используете BroadcastReceiver для SMS, другое приложение не будет получать никаких уведомлений о входящих SMS, и пользователь не будет ни о чем проинформирован. С помощью приведенного выше кода вы можете перехватить SMS и выполнить свою работу. Не забудьте прервать BroadcastReceiver. - person 113408; 28.05.2012
comment
привет, Хамза Кармуда, возможно ли отправить сообщение на определенный порт в Android (это потому, что ваш код также получает все сообщения, которые отправляются в папку «Входящие» с других устройств. Но мне нужен код, который скрывает только сообщения связи между приложением Только приложения A и B, и это не мешает обычным возможностям обмена сообщениями. - person vij; 01.06.2012
comment
@vij Я не думаю, что вы можете фильтровать по порту. вы можете только проверить, содержит ли сообщение строку. в вашем случае из приложения A отправьте смс, содержащее, например, string AppA, и отфильтруйте код, указанный выше. - person 113408; 01.06.2012