为了使开发更容易,我希望能够将文本命令发送到我的Android应用程序(特别是在UI完全充实之前)。大概是在模拟器中,如果它也可以在通过USB连接的设备上工作,那将会很棒。当然,我可以在我的应用程序中添加一个editText控件并在其中键入命令,但是不希望处理调试事务,使UI混乱,以及所有复杂性。我还希望能够从计算机剪贴板粘贴文本,这可以排除EditText控件。
有没有办法做到这一点,比如通过任何android-sdk / tools / stuff?我会实现命令处理器java类/方法,但需要一些方法才能实际为它提供一个字符串。我想我可以通过文件系统或其他东西做一些与模拟器对话的东西,但是如果有可用的东西,我宁愿不用花很多时间来做这件事。
答案 0 :(得分:3)
如果是我,我只是让应用程序在非特权TCP端口上侦听来自telnet或netcat(nc)的连接,这些连接是通过向前设置adb端口传递到模拟器的主机上运行,或者从内部运行nc adb shell下的模拟器。但我说这是花了几年时间用TCP远程控制通道构建测试设备的人。
实际上,如果你想使用adb shell中的nc,你可以使用unix域套接字而不是tcp,这可以简化TCP的一些讨厌的重新连接问题。
(NickT的短信想法是一个有趣的,不确定哪个会更好)
答案 1 :(得分: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" />