【问题标题】:Android Java app Jsch send commands using buttonsAndroid Java 应用 Jsch 使用按钮发送命令
【发布时间】:2012-08-19 19:05:30
【问题描述】:

我正在尝试编写我的第一个 Android 应用程序以连接到我的 Raspberry Pi 并使用 gphoto2 库控制我的 DSLR。我目前有一个非常粗糙的应用程序,有两个按钮,一个“连接”按钮和一个“捕获”按钮。

package com.example.myfirstapp;

import java.util.Properties;
import com.jcraft.jsch.*;

import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.view.Menu;
import android.view.View;


public class MainActivity extends Activity {
    public final static String EXTRA_MESSAGE = "com.example.myfirstapp.MESSAGE";
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.activity_main, menu);
        return true;
    }
    /** Called when the user clicks the send button */
    public void sshConnect(View view) throws Exception {

            Properties props = new Properties(); 
            props.put("StrictHostKeyChecking", "no");

            String host="123.456.7.89";
            String user ="pi";
            String pwd = "password";
            int port = 22;

            Properties config = new Properties();
            config.put("StrictHostKeyChecking", "no");
            config.put("compression.s2c", "zlib,none");
            config.put("compression.c2s", "zlib,none");

            JSch jsch=new JSch();  
            Session session=jsch.getSession(user, host, port);          
            session.setConfig(config);
            session.setPassword(pwd);
            session.connect();
            Context context = getApplicationContext();
            CharSequence text = "Connected to Pi";
            int duration = android.widget.Toast.LENGTH_SHORT;
            android.widget.Toast toast = android.widget.Toast.makeText(context, text, duration);
            toast.show();
    }
    public static void sendCapture(Session session) throws Exception {    
            Channel channel = session.openChannel("exec");
            ((ChannelExec) channel).setCommand("gphoto2 --capture-image");
            channel.setInputStream(null);
            ((ChannelExec) channel).setErrStream(System.err);
            channel.connect();

    }
}

我可以连接到我的树莓派,但无法将 jsch 会话传递给“捕获”按钮,除非使用以下方法从连接部分调用它:

sendCapture(session);

我希望代码使用“连接”按钮通过 ssh 进行连接,然后能够尽可能多次地使用“捕获”按钮拍照。欢迎提出任何问题或一般性建议。

谢谢

【问题讨论】:

  • 您可以在按下捕获按钮时连接,捕获并断开连接。那时不需要保持连接。你应该把所有这些都包起来,例如AsyncTask
  • 连接、捕获和断开连接是我可能必须这样做的方式。我希望连接保持打开状态,因为我的目标是使应用程序更复杂,如果连接保持打开状态会更容易。感谢您提供的 AsyncTask 信息,这绝对是我应该注意的。

标签: android jsch raspberry-pi


【解决方案1】:
    Button btn = (Button)findViewById(R.id.btn);
    btn.setOnClickListener(new OnClickListener() {

        public void onClick(View arg0) {
            // TODO Auto-generated method stub
            String ip,username,password;
            ip="192.168.x.x";
            username="guest";
            password="guest";
  //Write your code here 

 });

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-12-21
    • 2014-07-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-04
    • 1970-01-01
    • 2018-03-14
    相关资源
    最近更新 更多