Java 使用Android应用程序在Rasperry Pi上执行SSH命令

Java 使用Android应用程序在Rasperry Pi上执行SSH命令,java,android,ssh,raspberry-pi,remote-access,Java,Android,Ssh,Raspberry Pi,Remote Access,我正在尝试使用带有SSH的Android应用程序向我的Raspberry Pi发送命令。该命令只应由Raspberry Pi执行,我不需要保存任何OutputStreams。当我发送命令“sudo reboot”时,它正在工作,因为当我按下应用程序上的按钮时,Pi正在执行重新启动。我实际上想做的是首先使用命令“cd Desktop”,然后使用命令“sudo java-classpath.:classes:/opt/pi4j/lib/'*'SimpleTextServer”启动一个程序 我通过使用

我正在尝试使用带有SSH的Android应用程序向我的Raspberry Pi发送命令。该命令只应由Raspberry Pi执行,我不需要保存任何OutputStreams。当我发送命令“sudo reboot”时,它正在工作,因为当我按下应用程序上的按钮时,Pi正在执行重新启动。我实际上想做的是首先使用命令“cd Desktop”,然后使用命令“sudo java-classpath.:classes:/opt/pi4j/lib/'*'SimpleTextServer”启动一个程序

我通过使用找到了如何使用以下代码。外部lib包括在内,应用程序本身也在工作,它只是将命令发送给Pi,Pi执行这些命令

这是代码(我希望不是全部)

公共类SlimpleTextClientActivity扩展了活动实现OnClickListener{
私人按钮;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity\u slimple\u text\u客户端);
//按钮按下事件侦听器
buttonSSH.setOnClickListener(新视图.OnClickListener(){
公共void onClick(视图v){
新建异步任务(){
@凌驾
受保护的Void doInBackground(整数…参数){
试一试{
Ausgabe=ExecuteMoteCommand(“pi”、“树莓”、“38.110.23.254”、22);
}捕获(例外e){
e、 printStackTrace();
}
返回null;
}
}.执行(1);
}
});
}
公共静态字符串ExecuteMoteCommand(字符串用户名、字符串密码、字符串主机名、int端口)
抛出异常{
JSch JSch=新的JSch();
Session Session=jsch.getSession(用户名、主机名、端口);
session.setPassword(密码);
//避免要求钥匙确认
Properties prop=新属性();
道具放置(“检查”、“否”);
session.setConfig(prop);
session.connect();
//SSH通道
ChannelExec channelssh=(ChannelExec)
会话。openChannel(“exec”);
ByteArrayOutputStream bas=新的ByteArrayOutputStream();
channelssh.setOutputStream(baos);
//执行命令
//channelssh.setCommand(“cd桌面”);
//channelssh.setCommand(“sudojava-classpath:classes:/opt/pi4j/lib/'*'SimpleTextServer”);
channelssh.setCommand(“sudo重新启动”);
channelssh.connect();
channelssh.disconnect();
返回bas.toString();
}
}
非常感谢您的帮助,如果我需要发布任何进一步的代码或信息,请告诉我

迈克尔

编辑:因此我确信代码本身正在工作,例如,如果我发送命令“lsusb>home/pi/Text.txt”,它会在这个目录下创建一个文本文件,其中包含终端的输出。因此,我如何更改代码,使其只运行命令(并可能在Raspberry Pi的终端上显示该命令)?

根据 你可以试试:

channelssh.setCommand("cd Desktop;sudo java -classpath .:classes:/opt/pi4j/lib/'*' SimpleTextServer");
channelssh.setCommand("cd Desktop;sudo java -classpath .:classes:/opt/pi4j/lib/'*' SimpleTextServer");