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

Java 如何使用android提供的消息服务在远程pc上唤醒?,java,android,networking,android-asynctask,wake-on-lan,Java,Android,Networking,Android Asynctask,Wake On Lan,是否有可能创建一个android应用程序,该应用程序始终在后台运行,并不断收听来自特定手机号码和特定格式的消息,并采取必要的措施?这是一个想法,我已经唤醒远程pc(请参阅前面的问题)。为此,我需要使用2部android手机,手机A和手机B。手机B位于远程位置,始终通过wifi连接到无线网络。它不断地收听来自a的消息(来自a的短信)。现在,如果A向B发送类似“唤醒PC EE:00:B3:2F:56:12密码”的消息,那么B应该在后台解析该消息,并使用特定的mac地址向PC发送魔法包。这只是一个想法

是否有可能创建一个android应用程序,该应用程序始终在后台运行,并不断收听来自特定手机号码和特定格式的消息,并采取必要的措施?这是一个想法,我已经唤醒远程pc(请参阅前面的问题)。为此,我需要使用2部android手机,手机A和手机B。手机B位于远程位置,始终通过wifi连接到无线网络。它不断地收听来自a的消息(来自a的短信)。现在,如果A向B发送类似“唤醒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)  

您好,安卓系统中是否可以在两个应用程序之间发送消息(即在上述问题中,A是否可以向B中运行的特定应用程序发送消息,而不是向B的收件箱发送消息?)?

对于SMS listner部分,您可以使用BroadcastReceiver从您的PDU中读取,如下所示:

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();
}
}
公共类SmsController扩展广播接收器{
@凌驾
公共void onReceive(上下文、意图){
c=上下文;
SmsMessage msgs[]=null;
Bundle=intent.getExtras();
试一试{
对象PDU[]=(对象[])bundle.get(“PDU”);
msgs=新SMS消息[PDU.length];
对于(int n=0;n0){
字符串from=msgs[i]。getOriginatingAddress();
if(message.contains(“您的代码”)){
if(message.contains(“MAC地址”)){
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>


和Android手机将可以访问pc的本地以太网。。。怎样?除非您的手机支持usb以太网适配器,否则您将无法访问本地网络。@MarcB:如果PC通过以太网连接到无线路由器,并且手机位于同一个wi-fi网络上,则它们将能够通信,是吗?请查看我编辑的问题。每当收到来自以下链接的短信时,您都可以执行代码。嗨,安卓系统中是否可以在两个应用程序之间发送消息(即在上述问题中,A是否可以向运行在该手机中的特定应用程序发送消息,而不是向B的收件箱发送消息)?是的。在应用程序中,您必须在清单中将broadcastreceiver的优先级设置为999。您还可以使用brodcastreceiver.abort()在收件箱中不显示它。只有您的应用程序才会收到您的SMSHi一件事,当用户打开手机时,应用程序应该自动开始运行,并且用户不应该对应用程序有任何控制。也就是说,如果收到该消息,则应读取该消息,执行某些工作并删除该消息。如果某个远程用户使用手机,首先,用户不应该被告知任何有关后台应用程序运行的信息。有可能开发这种应用程序吗?是的。当您
abort()
短信息的广播接收器时,其他应用程序将不会收到有关传入短信息的任何通知,用户也不会收到任何通知。使用上述代码,您可以截获短信并完成您的工作。别忘了中止BroadcastReceiver。嗨,Hamza Karmouda,在android中是否可以将消息发送到特定端口(这是因为您的代码也接收从其他设备发送到收件箱的所有消息。但我需要一些代码,它仅隐藏应用程序A和应用程序B之间的通信消息,并且不会干扰正常的消息功能。