2010-11-19 67 views
2

爲了使開發更容易,我希望能夠將文本命令發送到我的Android應用程序(特別是在UI完全充實之前)。大概在模擬器中,但如果它也可以在通過USB連接的設備上工作,那將是非常棒的。當然,我可以將editText控件添加到我的應用程序中,然後在其中鍵入命令,但不希望處理調試事件,讓UI變得混亂,以及所有複雜的事情。我也希望能夠粘貼來自計算機剪貼板的文本,該文件排除了EditText控件。將調試命令發送到在仿真器中運行的應用程序

有沒有辦法做到這一點,通過任何的android-sdk/tools /東西說?我會實現命令處理器java類/方法,但需要一些方法才能實際爲它提供一個字符串。我想我可以通過文件系統或類似的東西來做一些與模擬器對話的事情,但是如果有可用的東西,不用花很多時間去做。

回答

2

向模擬器提供字符串的一種方法是實現用於SMS消息的BroadcastReceiver。然後從DOS框中,你可以'telnet localhost 5554'(或者你的模擬器啓動的任何數字)然後你可以使用模擬器命令sms send 1234 yourString。 (1234就是爲「發送」電話號碼的假。

你將不得不解析接收器內的字符串,使之改變不同類的成員變量等,或別的什麼東西。

這是一個非常笨拙的方法,但它不會影響你的UI和那隻需要的代碼十幾線接收器。

我只是堅持此位的代碼到的onCreate,並設置一個斷點測試原理

rcvIncoming = new BroadcastReceiver() { 
     @Override 
     public void onReceive(Context context, Intent intent) { 
      String message = ""; 
      Bundle data = intent.getExtras(); 
      if (data != null) { 
       Object pdus[] = (Object[]) data.get("pdus"); 
       String sender = null; 
       for (Object pdu : pdus) { 
       SmsMessage part = SmsMessage.createFromPdu((byte[]) pdu); 
       message += part.getDisplayMessageBody(); 
       if (sender == null) { 
       sender = part.getDisplayOriginatingAddress(); 
       } 
      } 
     } 
     String test = message;// breakpoint here to test 
     } 
    }; 
    registerReceiver(rcvIncoming, new IntentFilter(
       "android.provider.Telephony.SMS_RECEIVED")); 

你將需要這在顯卡同樣:

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

+0

有趣的想法。從來沒有做過BroadcastReceivers,我認爲它非常簡單(我正在看這個例子:http://stackoverflow.com/questions/1944102/android-sms-receiver-not-working) – rob 2010-11-22 03:33:33

+0

不太難做到。我編輯原始代碼以顯示代碼基礎 – NickT 2010-11-22 09:21:52

+0

好的,謝謝。工程很好,滿足了我的需求! – rob 2010-11-22 16:56:39

3

如果是我,我只需讓應用程序在非特權TCP端口上監聽telnet或netcat(nc)的連接,並通過設置adb端口轉發到仿真器上,或運行nc在adb shell下的模擬器內。但我說那些花了幾年時間用TCP遠程控制通道構建測試設備的人。

其實,如果你想使用NC從亞行外殼,你可以使用Unix域套接字而不是TCP,它可以簡化一些與TCP討厭的重新連接的問題。

(NickT的短信主意很有趣,不確定哪個會更好)

+0

我對這個解決方案很感興趣。我的回答雖然行得通,但有點像用錘子敲一個螺釘。我一直讓Eclipse照顧亞行,並將其視爲一個黑匣子。如果調試器運行,我可以在shell中使用'adb forward'命令,並期望它影響正在運行的調試會話,還是有辦法通過Eclipse中的調試啓動配置來設置此adb轉發? – NickT 2010-11-22 12:30:42

+0

adb forward並不是真正的'調試器'的一部分。相反,它所做的是建立一個端口轉發,因此tcp或特定端口上的開發機器的任何連接都會轉到特定端口上的仿真器上。你可以在這裏監聽一個tcp服務器。至於哪個答案更好,可能是編寫一個獨特的android sms接收器比編寫一個通用的tcp服務器容易。 – 2010-11-22 16:43:25

+0

謝謝克里斯,我用尼克的解決方案主要是因爲我可以粘貼它,它工作(今天早上感覺懶惰:)),但我可能會重新訪問這個並嘗試你的方式。 – rob 2010-11-22 17:00:58

相關問題