如何使用android提供的消息服务在远程PC上唤醒?

时间:2012-05-27 05:17:45

标签: java android networking android-asynctask wake-on-lan

是否可以创建一个Android应用程序,它始终在后台运行并继续收听来自特定手机号码和特定格式的消息,并采取必要的措施?这是一个我必须唤醒远程电脑的想法(请参阅上一个问题)。我需要为此目的使用2部Android手机,手机A和手机B. B位于远程位置,并且始终通过wifi连接到无线网络。它继续收听来自A的消息(来自A的SMS)。现在如果A向B发送诸如“WAKE ON PC EE:00:B3:2F:56:12密码”之类的消息,那么B应该在后台解析该消息并将魔术包发送到具有特定mac地址的pc。这只是一个想法。是否有可能创建这种应用程序?

initial setup:

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

嗨,是否可以在android中的两个应用程序之间发送消息(即上述问题,而不是A发送消息到B的收件箱,A是否可能将消息发送到B中运行的特定应用程序收件箱?)?

1 个答案:

答案 0 :(得分: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>