其实这篇文章要说的东西就要少的很多了,需要注意的是这个程序在竖屏时可有手动编辑命令发送并查看历史记录,横屏时出现控制按钮和视频窗口。
竖屏没什么好介绍的,介绍横屏吧。
setup按钮是用来登陆的,开启程序的时候必须先用这个连接google服务器
上面左边的文本框是下位机使用的账号,就是车载手机上面登陆的账号
上面右边的文本框是伪视频发送周期,默认的数值是1s(1000ms)发送一帧
ON/RESET是启动和从新设置伪视频用的
OFF按钮用于关闭伪视频功能
SHOT按钮是用来照相的,即执行拍照动作,返回一个很大很清晰的jpeg图像显示在中间的窗口中
控制时间选择,8s 2s 1s .5 这个是选择一个命令所持续的时间的,分别对应持续8秒2秒1秒0.5秒
中间的大黑框显示伪视频和照片
右侧那一大堆按钮自然就是发送移动指令的了(正中间那个用于一不小心发错命令时紧急停止)
这个程序大段的代码都是布局的,没什么需要注意的地方,要注意的是我的左右转命令会有少许的前进,这是因为我们的车模两侧的轮子不是差动的,如果是差动的轮子的话如坦克的话请自行调节发送的命令。
还有一点比较重要的是中间显示图片的问题,每次改变显示的内容必须新建一个线程,不然程序会卡死,这里贴上核心代码:
/**
* 直接调用setImageBitmap是无法正常显示的,经过查资料得知必须在一个独立的线程中才行
*
* @author Lynx
*
*/
private class setMapThread implements Runnable {
public Bitmap mBitmap = null;
public void setB(Bitmap mBitmap) {
this.mBitmap = mBitmap;
}
// run方法会在UI线程中执行
public void run() {
mImageView.setImageBitmap(mBitmap);
if (D)
Log.d(TAG, "+++ Jpeg Sitted +++");
}
}
// 根据不同的类型来处理图片是否需要旋转和存储
String JpegMessageType = messageIn.getBody();
if (JpegMessageType.equals("ShotCut-JPEG")) {
Matrix matrix = new Matrix();
matrix.postRotate(90);
Bitmap nbmp = Bitmap.createBitmap(mBitmap, 0, 0,
mBitmap.getWidth(), mBitmap.getHeight(), matrix,
true);
mBitmap = nbmp;
} else {
File file = new File("/mnt/sdcard/Car"
+ new DateFormat().format("yyyyMMdd_hhmmss",
Calendar.getInstance(Locale.CHINA))
+ ".jpg");
try {
file.createNewFile();
BufferedOutputStream os = new BufferedOutputStream(
new FileOutputStream(file));
mBitmap.compress(Bitmap.CompressFormat.JPEG, 100, os);
os.flush();
os.close();
Toast.makeText(getApplicationContext(),
"图片保存完毕,在存储卡的根目录", Toast.LENGTH_LONG).show();
} catch (IOException e) {
e.printStackTrace();
}
}
setMapThread newThread = new setMapThread();
newThread.setB(mBitmap);
mImageView.post(newThread);
还有就是横屏转换的时候程序会从新载入导致错误,防止从新载入的方法是修改AndroidManifest.xml文件并重写onConfigurationChanged方法,大家可以自行google,这些代码是已经写在这个程序里面的。
下一篇文章贴上程序