2016-01-13 143 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