2016-01-13 48 views
1

我想从使用USB连接到我的电脑的android手机发送短信。我起诉usb4Java库。根据链接usb4java-javax-examples,我已经访问了手机并发送了adb命令给手机。这里是代码和输出。是否可以使用adb协议从android手机发送短信

public static void main(String[] args) throws Exception { 
    .... 
    AdbDevice device = devices.get(0); 
    device.open(); 
    try { 
     // Send the connect message 
     Message message = new ConnectMessage(ConnectMessage.SYSTEM_TYPE_HOST, "12345678", "ADB Demo"); 
     System.out.println("Sending: " + message); 
     device.sendMessage(message); 
     boolean connected = false; 
     while (!connected) { 
      message = device.receiveMessage(); 
      System.out.println("Received: " + message); 

      // If connect message has been received then we are finished 
      if (message instanceof ConnectMessage) { 
       connected = true; 
      } 
      .... 
     } // end of while 
     // Open "sync:" 
     message = new OpenMessage(1, "sync:"); 
     System.out.println("Sending: " + message); 
     device.sendMessage(message); 
     message = device.receiveMessage(); 
     System.out.println("Received: " + message); 
     if (!(message instanceof OkayMessage)) { 
      System.err.println("Open failed"); 
      System.exit(1); 
     } 
     int remoteId = ((OkayMessage) message).getRemoteId(); 

     // Close 
     message = new CloseMessage(1, remoteId); 
     System.out.println("Sending: " + message); 
     device.sendMessage(message); 
     message = device.receiveMessage(); 
     System.out.println("Received: " + message);  
    } 
} 

这里是我收到

Sending: CONNECT(0x01000000, 4096, "host:12345678:ADB Demo") 
Received: CONNECT(0x01000000, 4096, "device::") 
Sending: OPEN(1, "sync:") 
Received: OKAY(1, 1) 
Sending: CLOSE(1, 1) 
Received: CLOSE(0, 1) 

是否有已发送的任何方式,我用ADB protpcol和SMS发送短信指令到Android手机的输出。像SENDSMS(int number, String textMessage)

或者还有其他方法可以做到吗?

感谢

**编辑


我在这里做什么,但我越来越接近(0,1)。不知道是什么做错了

message = new OpenMessage(1, "shell:command"); 
System.out.println("Sending: " + message); 
device.sendMessage(message); 
message = device.receiveMessage(); 
System.out.println("Received: " + message); 
if (!(message instanceof OkayMessage)) { 
    System.err.println("Open failed"); 
    System.exit(1); 
} 
int remoteId = ((OkayMessage) message).getRemoteId(); 
int localId = ((OkayMessage) message).getLocalId(); 

String num = "00923424700007"; 
String text = "Hello World"; 

message = new WriteMessage(remoteId, localId, "am start -a android.intent.action.SENDTO -d sms:"+num+" --es sms_body \""+text+"\" --ez exit_on_sent true"); 
System.out.println("Sending: " + message); 
device.sendMessage(message); 
message = device.receiveMessage(); 
System.out.println("Received: " + message); 

if (!(message instanceof OkayMessage)) { 
    System.err.println("Open failed"); 
    System.exit(1); 
} 

remoteId = ((OkayMessage) message).getRemoteId(); 
localId = ((OkayMessage) message).getLocalId(); 

我在行做错了什么

message = new WriteMessage(remoteId, localId, "am start -a android.intent.action.SENDTO -d sms:"+num+" --es sms_body \""+text+"\" --ez exit_on_sent true"); 

感谢

+0

电话号码不是'int':例如'0033 ...'。你需要使用一个字符串来表示它。 – Henry

+1

检查了这一点:http://stackoverflow.com/q/4043490/244611 –

回答

2

试试这个:

adb shell am start -a android.intent.action.SENDTO -d sms:CCXXXXXXXXXX --es sms_body "SMS BODY GOES HERE" --ez exit_on_sent true 
adb shell input keyevent 22 
adb shell input keyevent 66 

the entire answer by arpz

+3

链接到现有答案的正确方法是通过将新问题标记为重复 –

+0

我是否像这样发送它?message = new OpenMessage(1 ,“android.intent.action.SENDTO -d sms:923424700007 --es sms_body \”SMS BODY GOES HERE \“--ez exit_on_sent true”);'。我也尝试了你提供的全部命令,但是我得到了'Received:CLOSE(0,1)'。谢谢 – Basit

相关问题