在Android中运行Linux命令以通过串行进行通信

时间:2015-10-21 14:31:39

标签: android linux adb embedded-linux adb-shell

我正在尝试在Android中运行命令以将输出发送到串行端口。如果我使用adb shell并输入以下内容:

busybox echo -ne 'testMessage' > /dev/ttymxc1

我在连接到主板串口的终端上收到'testMessage'。

然后我在Android应用中运行以下命令:

    try
    {
        Runtime.getRuntime().exec("busybox echo -ne 'testMessage' > /dev/ttymxc1");
    } catch (IOException e)
    {
        e.printStackTrace();
    }

但是,这次我没有输出任何错误。 我试过没有busybox运行,只是

echo -ne 'testMessage' > /dev/ttymxc1

但是这会导致null工作目录,null环境错误。这虽然在adb shell中有效...

是否有理由在app中运行命令的输出与在adb shell中运行命令的操作不同?有没有正确的方法让这个工作?

编辑:请注意我以root用户身份运行。我还在此命令之前运行了以下命令,并确保已授予超级用户权限:

    try
    {
        process = Runtime.getRuntime().exec("su");
    }
    catch (IOException e)
    {
        e.printStackTrace();
    }

1 个答案:

答案 0 :(得分:0)

我认为你应该等待命令的结果,只要它是异步进程。 在您的代码中,命令正在进行中,但您没有等待从中获取任何结果,因此您没有错误/结果。

试试这个:

    public class Sunpos {
   final private double Pi = Math.PI;
   final private double eul = 2.71828182845904523552 ;
   final private double sonauf = 90;
   final private double RAD = 0.017453292519943295769236907684886;

public double sunrisefinal (double Breitengrad, double Laengengrad, int tagzahl, int sommerzeit, int nacht) {

    double lngHour = Laengengrad/15;
    double t = tagzahl + ((6 - lngHour)/24);

    // double ab = tagzahl + ((18 - lngHour)/24);
    double M = (0.9856 * t) - 3.289;
    double L = M + (1.916 * Math.sin(M)) + (0.020 * Math.sin(2 * M)) + 282.634;

        if (L >= 359) { L -= 360; }
        else if (L < 0) { L += 360; }  

    double RA = (Math.atan(0.91764 * Math.tan(Pi/180)*L));

        if (RA >= 359) { RA -= 360; }
        else if (RA < 0) { RA += 360; }

    double Lquadrant = (Math.floor(L/90)*90);
    double RAquadrant = (Math.floor(RA/90))*90;
    RA = RA + (Lquadrant - RAquadrant);
    RA = RA/15;

    double sinDec = 0.39782 * Math.sin((Pi/180)*L);
    double cosDec = (180/Pi)*(Math.cos(Math.asin(sinDec)));
    double cosH = (Math.cos((Pi/180)*sonauf)-(sinDec*Math.sin((Pi/180)*Breitengrad)))/(cosDec * Math.cos((Pi/180)*Breitengrad));
    double H = 360 - Math.acos(cosH);
    H /= 15;

    double T = H + RA -(0.06571 * t) - 6.622;
    double UTC = T - lngHour;

        if (UTC >= 23) { UTC -= 24; }
        else if (UTC < 0) { UTC += 24; }

    double locTime = UTC; // Fuer die schweiz!
    System.out.println(locTime);
    return(0);


}