jdk-8u101-windows-x64
基于Eclipse的Android开发环境或者 Android studio
调试工具(内建虚拟机、第三方虚拟机、真机)
1)推荐第三方安卓虚拟机,内建的虚拟机启动是真的慢。第三方安卓虚拟机如:雷电、夜神、逍遥等。连接步骤:
系统应用—>设置—>关于平板电脑—>连续点击版本号
出现开发者选项—->进入开发者选项—->勾选usb调试
win+r,输入cmd打开命令控制器,将目录切换到你安装雷电模拟器的文件夹下,然后输入
adb.exe connet 127.0.0.1:5555
其他常见模拟器请对应输入:
夜神模拟器:adb connect 127.0.0.1:62001
逍遥安卓模拟器: adb connect 127.0.0.1:21503
天天模拟器:adb connect 127.0.0.1:6555
海马玩模拟器 :adb connect 127.0.0.1:53001
网易MUMU模拟器:adb connect 127.0.0.1:7555
2)真机调试可参考:https://blog.csdn.net/ShimmerK/article/details/80585186
- src — 存放java代码,包名就是代码存放位置
gen — 系统自动生成
Libraries — 存放jar文件,已经打包好了的库文件
asset — 非主流资源文件夹
bin — 编译生成的文件
libs — 用来存放用户要使用的第三方库文件的位置。
res — 主流资源文件夹
drawable 存放不同分辨率的贴图
layout 存放布局文件
AndroidManifest.xml 存放项目配置参数。
- LinearLayout 线性布局:内部所有的控件水平或者垂直排成一排。
重要属性
android:gravity=" " android:layout_gravity=" " android:layout_weight=" "
layout_gravity :控制控件在父布局中的位置,类比margin;
gravity : 控制控件中内容的显示位置,类比padding
按照比例划分页面
只有在LinearLayout中才能使用此功能。布局的方向是横向,则可以分配子控件的宽度;布局的方向是纵向,则可以分配子控件的高度。如果要分配宽度或者高度,那么需要设置为0dp后,增加权重属性android:layout_weight="1"
- RelativeLayout 相对布局:需要有参照物,给参照物起名字后再使用。
常用属性见下:
android:id="@+id/text1" //参照物位置(上下左右) android:layout_above="@id/text1" android:layout_below="@id/text1" android:layout_toRightOf="@id/text1" android:layout_toLeftOf="@id/text1" //在上级的中心、水平中心、垂直中心 android:layout_centerInParent="true android:layout_centerHorizontal="true android:layout_centerVertical="true" //对齐上级(上下左右) android:layout_alignParentBottom="true" android:layout_alignParentTop="true" android:layout_alignParentLeft="true" android:layout_alignParentRight="true" //对齐某个参照物的某个方位 android:layout_alignRight="@id/text1" android:layout_alignLeft="@id/text1" android:layout_alignBottom="@id/text1" android:layout_alignTop="@id/text1"
使用第三方库hellochart绘制折线 :
1.将库文件hellocharts-library-1.5.8.jar添加到项目中的libs文件夹下
2.选中项目,点击鼠标右键,点击Build Path — Configure Build Path
3.在弹出的窗口中,切换到Libraries选项卡,点击Add JARs
4.在弹出的窗口中选择添加到项目中的hellocharts-library-1.5.8.jar并确定。
5.点击“Apply and Close”按钮,添加成功!后面可以把库中的统计图作为一个项目中的普通控件来进行使用。
1.为了确保客户端连接到服务器,需要在运行代码之前将客户端与服务器置于一个热点中。
1)需要使用服务器IP地址找到服务器硬件
2)需要使用服务器软件指定的端口号,找到服务程序
3)在AndroidMainfest.xml中添加权限
2.线程
程序默认只有一个线程,称为主线程。为了避免网络操作阻塞主线程,所以网络操作必须在子线程中执行。具体操作过程:
创建一个简单的子线程
new Thread() {}.start();
加入子线程的的方法体
new Thread() {
//子线程要执行的代码
public void run() {
}
}.start();
在run方法中添加子线程要执行的代码。
※Tips:
连接后退出要释放资源(下面的代码可以直接粘贴)
//释放资源
@Override
protected void onDestroy() {
super.onDestroy();
new Thread() {
public void run() {
//释放资源并关闭
if(mSocket != null && mSocket.isConnected())
{
try {
mSocket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}.start();
}
子线程严禁执行UI操作(即和控件相关的操作)
在子线程中切换到主线程执行
runOnUiThread(new Runnable() {
public void run() {
//TODO 主线程要执行的代码
}
});
如果代码的层次过多,或者代码的格式不规范,可以使用格式化功能重新规整代码。Source->Format
六、数据传输- 给到客户端的数据结构体如下:
struct conver_env_info {
int snum; //仓库编号
float temperature; //温度
float humidity; //湿度
float ill; //光照
float bet; //电池电量
float adc; //电位器信息
signed char x; //三轴信息
signed char y;
signed char z;
};
使用javolution将C语言中的结构体变量转换为Java中类的对象。在项目中接收服务器数据:1)将javolution-5.5.1.jar添加到项目中
2)选中包名,点击鼠标右键,点击New—Class
3)在弹出的窗口中输入Name框的类名后,点击SuperClass后面的“Browse”按钮。
4)在Choose a type中,输入javolution.io.Struct
5)点击Finish按钮
//房间编号(本次实训项目只有一个房间) public final Signed32 snum = new Signed32(); //温度 public final Float32 temperature = new Float32(); //湿度 public final Float32 humidity = new Float32(); //光照 public final Float32 ill = new Float32(); //电池电压 public final Float32 bet = new Float32(); //电位器 public final Float32 adc = new Float32(); //xyz三轴 public final Signed8 x = new Signed8(); public final Signed8 y = new Signed8(); public final Signed8 z = new Signed8();
Tips:
模拟数据建议实现的优先级:
光照 > 温度 > 湿度 > 电池电压 = 电位器 >= xyz
真实数据建议实现的优先级:
光照 > xyz > 温度 >= 湿度 > 电池电压 > 电位器
命令组成的核心是八个二进制位,用1byte表示一个命令码,格式为:
|仓库编号2bit|设备编号2bit|保留2bit|设备控制命令码2bit
//仓库编号 #define STORE1 0x40 //仓库一 #define STORE2 0x80 //仓库二,智能家居项目用仓库二 #define STORE3 0xc0 //仓库三 //设备编号 #define FAN 0x00 //风扇 #define BEEP 0x10 //蜂鸣器 #define LED 0x20 //灯 //设备命令控制码 FAN_OFF = STORE2|FAN|0x00, //风扇关闭 FAN_1 = STORE2|FAN|0x01, //风扇一档 FAN_2 = STORE2|FAN|0x02, //风扇二挡 FAN_3 = STORE2|FAN|0x03, //风扇三挡 BEEP_OFF = STORE2|BEEP|0x00, //蜂鸣器关闭 BEEP_ON = STORE2|BEEP|0x01, //蜂鸣器响 BEEP_ALRRM_OFF = STORE2|BEEP|0x02, //未开放,实际使用10 BEEP_ALRRM_ON = STORE2|BEEP|0x03, //未开放,实际使用11 LED_OFF = STORE2|LED|0x00, //灯关 LED_ON = STORE2|LED|0x01, //灯开
例子:
打开仓库2的灯
type 00000000 cmd 10100001
在客户端发送两个byte,一个byte是00000000,另一个byte10100001



