我正在尝试在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();
}
答案 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);
}