




已阅读5页,还剩31页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
宝贵建议请发送至: -编程,始于黑马 Android课程同步教程Beta 1.0 版 By阳哥 Copyright2015 黑马程序员版权所有淡定是一种人生涵养,纯真是一种性格使然。 阳哥笔记-Android 1. 课程简介22. 智能家居发展情况(了解)22.1 智能家居起源22.2 国内发展现状33. 案例-智能摄像头()33.1 准备工作33.2 工作原理43.3 代码实现64. 案例-智能继电器()184.1 准备工作184.2 工作原理184.3 代码实现19Android-智能家居1. 课程简介智能家居是在互联网的影响之下物联化体现。智能家居通过物联网技术将家中的各种设备连接到一起,提供各种控制或者定时控制的功能和手段。与普通家居相比,智能家居不仅具有传统的家庭居住功能,同时还兼备建筑、网络通信、信息家电、设备自动化功能,提供全方位的信息交互功能。在本课程中一共有两个案例,第一个是智能摄像头,我将演示如何通过自己编写Android应用控制网络摄像头,实现远程监控功能。第二个是蓝牙继电器,通过手机的蓝牙跟智能设备进行通信进而控制开关,实现电器设备的“智能化”。2. 智能家居发展情况(了解)2.1 智能家居起源智能家居的概念起源很早,但是直到1984年美国联合科技公司(United Technologies Building System)将建筑设备信息化、整合化概念应用于美国康涅狄格州(Connecticut)哈特佛市(Hartford)的CityPlaceBuilding时,才出现了首栋的“智能型建筑”,从此揭开了全世界争相建造智能家居派的序幕。智能家居从开始到现在主要经历了四个阶段。 家庭自动化通过一个中央微处理机接受相关电子产品(检测环境变化)的信息,再发送给其他产品。 家庭网络 家庭网络是在家庭范围内将家电(安全系统、照明系统)和广域网相连接的一种新技术。 网络家电 利用数字技术、网络技术及智能控制技术设计改进的新型家电产品,比如网络空调。 信息家电 能够通过网络系统交互信息的家电产品。2.2 国内发展现状智能家居在我国还是一个新生产业,处于一个导入期与成长期的临界点,我国政府在2013年8月14日发表了关于促进信息消费扩大内需的若干意见,大力发展宽带业务,也为智能家居打下了坚实的基础,加之智能家居市场消费观念还未形成,市场的消费潜力必然是巨大的,产业前景光明。萌芽期/智能小区期(1994年-1999年) 概念熟悉、产品认知的阶段,还没有出现专业的智能家居生产厂商。开创期(2000年-2005年) 成立了五十多家智能家居研发生产企业,没有进入国内市场。徘徊期(2006-2010年) 过分夸大智能家居的功能,行业用户、媒体开始质疑智能家居的实际效果,国内企业转型,国外企业进入(罗格朗、霍尼韦尔)。融合演变期(2011-2020年) 进入20 14年以来,各大厂商已开始密集布局智能家居,经过一年多产业磨合,2015年合作企业已普遍进入到出成果时刻,智能家居新品已经层出不穷的出现了。3. 案例-智能摄像头()3.1 准备工作 网络摄像头我这里采用的是 品牌: EasyN/易视眼 型号: TM007 ,产品图片如下。 对应SDK 我们开发的软件是基于第三方智能网平台的,因此需要使用到第三方的SDK。3.2 工作原理首先当我们将网络摄像头买回来的时候,需要给其设置wifi账号和密码,以让我们的硬件能够连接到物联网云平台。在我们这个案例中使用到的物联网云平台是台湾TUTK公司/推出的IOTC(Internet of Things Cloud 物联网云)平台。摄像头使用的是深圳市普顺达科技有限公司 /的硬件设备。这两家公司的网页首页截图如下:当我们的摄像头通上电并设置好网络后会自动连接到IOTC服务器。然后处于等待状态,等待接收来自App端发送的指令。App通过硬件设备的UID、用户名、密码登陆到IOTC服务器,然后发送指令。IOTC获取到App的指令后在转发给设备,然后设备将返回结果(可能是状态数据也可能是摄像机画面)在返回给IOTC,IOTC再将这些结果数据传给App。这样整个就实现了手机和摄像头的互联互动。在这整个过程中IOTC平台是核心部分,也可以看出智能家居其实拼的就是服务平台。服务大概流程图如下:3.3 代码实现我们要做的案例效果图如下,总共有两个界面,第一个界面是登录界面,在文本框中输入名称、UID、密码,其中名称是我们自己给自己的摄像头设备起的名称,可以随意写。UID在设备上有,我们直接抄过来,是设备的唯一标识,不可以修改。密码是设备出厂时给了默认的,我们后期可以修改的。为了防止被黑客给黑掉,其实我们只要UID不外漏即可。 编写布局文件 布局文件共两个,第一个登录界面的布局太简单了,就不给出来了。值给出第二个布局文件。 添加类库 如下图所示,考虑到类库的保密性在该文档中就不再给出下载地址。 核心代码 总共有两个Activity,分别是MainActivity和CameraPlayActivityMainActivity代码如下:package com.example.smartcamera;import android.support.v7.app.ActionBarActivity;import android.text.TextUtils;import android.view.View;import android.widget.EditText;import android.widget.Toast;import android.content.Intent;import android.os.Bundle;public class MainActivity extends ActionBarActivity public static final String NAME = name;public static final String PSW = psw;public static final String UID = uid;private EditText et_name;private EditText et_pwd;private EditText et_uid;Overrideprotected void onCreate(Bundle savedInstanceState) super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);initView();/* * 初始化子控件 */private void initView() et_name = (EditText) findViewById(R.id.et_devname);et_pwd = (EditText) findViewById(R.id.et_psw);et_uid = (EditText) findViewById(R.id.et_uid);/* * 点击Button开始链接 * * param view */public void connect(View view) String name = et_name.getText().toString();String pwd = et_pwd.getText().toString();String uid = et_uid.getText().toString();if (TextUtils.isEmpty(name) | TextUtils.isEmpty(pwd) | TextUtils.isEmpty(uid) Toast.makeText(this, 数据不能为空。, Toast.LENGTH_SHORT).show();return;Intent intent = new Intent(this, CameraPlayActivity.class);intent.putExtra(NAME, name);intent.putExtra(PSW, pwd);intent.putExtra(UID, uid);/跳转到播放页面startActivity(intent);CameraPlayActivity代码如下:package com.example.smartcamera;import com.tutk.IOTC.AVIOCTRLDEFs;import com.tutk.IOTC.AVIOCTRLDEFs.SMsgAVIoctrlPtzCmd;import com.tutk.IOTC.Camera;import com.tutk.IOTC.IRegisterIOTCListener;import com.tutk.IOTC.Monitor;import android.app.Activity;import android.content.Intent;import android.graphics.Bitmap;import android.os.Bundle;import android.os.Handler;import android.os.Message;import android.view.View;import android.view.View.OnClickListener;import android.widget.ImageButton;import android.widget.TextView;public class CameraPlayActivity extends Activity implements OnClickListener, IRegisterIOTCListener private Monitor monitor;private ImageButton ib_left;private ImageButton ib_right;private ImageButton ib_top;private ImageButton ib_bottom;private TextView tv_state;private String mName;private String mPsw;private String mUID;private Camera mCamera;Handler handler = new Handler() Overridepublic void handleMessage(android.os.Message msg) switch (msg.what) / 针对不同的连接状态做不同的处理case Camera.CONNECTION_STATE_CONNECT_FAILED:tv_state.setText(连接失败);break;/ 如果是已经连接成功case Camera.CONNECTION_STATE_CONNECTED:tv_state.setText(已连接);/ 调用play()方法,完成Camera和Monitor的绑定,最终将画面显示出来play();break;case Camera.CONNECTION_STATE_CONNECTING:tv_state.setText(连接中.);break;case Camera.CONNECTION_STATE_DISCONNECTED:tv_state.setText(未连接);break;case Camera.CONNECTION_STATE_TIMEOUT:tv_state.setText(连接超时);break;case Camera.CONNECTION_STATE_UNKNOWN_DEVICE:tv_state.setText(未知设备);break;case Camera.CONNECTION_STATE_UNSUPPORTED:tv_state.setText(不支持的设备);break;case Camera.CONNECTION_STATE_WRONG_PASSWORD:tv_state.setText(密码不正确);break;case Camera.CONNECTION_STATE_NONE:tv_state.setText(未知错误);break;default:tv_state.setText(未知 + msg.what);break;protected void onCreate(Bundle savedInstanceState) super.onCreate(savedInstanceState);setContentView(R.layout.activity_camera);/ 初始化控件initView();/ 初始化数据initData();/ 开始连接网络connectNet();/* * 显示画面的核心方法 */protected void play() /* * 如果条件满足则 * 1 将界面monitor和Camera进行绑定 * 2 开始播放Camera画面 * */if (mCamera != null & mCamera.isChannelConnected(Camera.DEFAULT_AV_CHANNEL) monitor.attachCamera(mCamera, Camera.DEFAULT_AV_CHANNEL);mCamera.startShow(Camera.DEFAULT_AV_CHANNEL, true);private void connectNet() / 初始化摄像头 内部加载c语言库Camera.init();/ 新创建一个Camera实例 不是Android中的Camera而是com.tutk.IOTC.Camera.CameramCamera = new Camera();/* * 给Camera注册IOTC监听 * IOTC Internet of Things Cloud 物联网云平台 * 该平台是台湾TUTK公司推出,有偿使用,因此SDK不开源 */mCamera.registerIOTCListener(this);/* * 连接到IOTC云平台 * 连接传入的是UID * 每个硬件设备出厂时都有唯一的UID编号,并且出厂时已经将该编号注册到IOTC平台服务器 * 硬件在连接服务器的时候需要带着自己的身边标识(就是UID) */mCamera.connect(mUID);/* * 仅仅让硬件连接网络还是不够了,作为终端用户我们想看到云平台上的摄像头画面那么还需要用户 * 通过用户名和密码登陆 进行身份验证 * * parameter Camera.DEFAULT_AV_CHANNEL * 我们可以把一个摄像头硬件理解为一个电视机,那么电视机可以有多个频道,这里我们使用默认频道即可 * parameter mName 用户名 * parameter mPsw 密码 * * 当开始连接的时候,由于之前注册了Camera监听,因此接收到的数据会以回调的形式传到形参中 * ,因此这个时候我们就去IRegisterIOTCListener的回调方法中等数据就行了 */mCamera.start(Camera.DEFAULT_AV_CHANNEL, mName, mPsw);/* * 从上一个Activity中获取用户数据 */private void initData() Intent intent = getIntent();mName = intent.getStringExtra(MainActivity.NAME);mPsw = intent.getStringExtra(MainActivity.PSW);mUID = intent.getStringExtra(MainActivity.UID);/* * 当前类已经实现了OnClickListener接口因此绑定点击事件只需要传递this即可 */private void initView() monitor = (Monitor) findViewById(R.id.monitor);ib_left = (ImageButton) findViewById(R.id.ib_left);ib_right = (ImageButton) findViewById(R.id.ib_right);ib_top = (ImageButton) findViewById(R.id.ib_top);ib_bottom = (ImageButton) findViewById(R.id.ib_bottom);tv_state = (TextView) findViewById(R.id.tv_state);/ 初始化点击事件ib_bottom.setOnClickListener(this);ib_left.setOnClickListener(this);ib_right.setOnClickListener(this);ib_top.setOnClickListener(this);/* * 上下左右点击事件的绑定 */Overridepublic void onClick(View v) switch (v.getId() case R.id.ib_left:/* * 发送左移动画面 指令 * PTZ :在安防监控应用中是 Pan/Tilt/Zoom 的简写,代表云台全方位(左右/上下)移动及镜头变倍、变焦控制。 * 因为上下左右都需要发送指令,因此我抽取出一个方法 */sendPTZ(AVIOCTRLDEFs.AVIOCTRL_PTZ_LEFT);break;case R.id.ib_right:sendPTZ(AVIOCTRLDEFs.AVIOCTRL_PTZ_RIGHT);break;case R.id.ib_bottom:sendPTZ(AVIOCTRLDEFs.AVIOCTRL_PTZ_DOWN);break;case R.id.ib_top:sendPTZ(AVIOCTRLDEFs.AVIOCTRL_PTZ_UP);break;/* * 发送移动指令 */private void sendPTZ(int type) /* * 给摄像头发送指令 * * parameter Camera.DEFAULT_AV_CHANNEL 默认频道 * AVIOCTRLDEFs.IOTYPE_USER_IPCAM_PTZ_COMMAND 指令类型 * SMsgAVIoctrlPtzCmd.parseContent(byte) type, (byte) 0, * (byte) 0, (byte) 0, (byte) 0, (byte) * Camera.DEFAULT_AV_CHANNEL) * 指令数据,第三个参数是字节数组我们直接使用SMsgAVIoctrlPtzCmd类的parseContent方法生成即可 * */mCamera.sendIOCtrl(Camera.DEFAULT_AV_CHANNEL, AVIOCTRLDEFs.IOTYPE_USER_IPCAM_PTZ_COMMAND, SMsgAVIoctrlPtzCmd.parseContent(byte) type, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) Camera.DEFAULT_AV_CHANNEL);/ 销毁时退出摄像头Overrideprotected void onDestroy() super.onDestroy();quit();/* * 当接收到服务器的数据时回调该函数 * * param resultCode * 返回状态码 * */Overridepublic void receiveChannelInfo(Camera arg0, int channel, int resultCode) Message msg = Message.obtain();msg.what = resultCode;handler.sendMessage(msg);Overridepublic void receiveFrameData(Camera arg0, int arg1, Bitmap arg2) Overridepublic void receiveFrameInfo(Camera arg0, int arg1, long arg2, int arg3, int arg4, int arg5, int arg6) Overridepublic void receiveIOCtrlData(Camera arg0, int arg1, int arg2, byte arg3) Overridepublic void receiveSessionInfo(Camera arg0, int arg1) Overridepublic void onBackPressed() super.onBackPressed();quit();/* * 断开连接 */private void quit() if (monitor != null) / 1.解除绑定monitor.deattachCamera();/ 2.停止显示mCamera.stopShow(Camera.DEFAULT_AV_CHANNEL);/ 3.断开连接/ 3.1取消渠道号mCamera.stop(Camera.DEFAULT_AV_CHANNEL);/ 3.2断开连接mCamera.disconnect();/ 4.注销监听mCamera.unregisterIOTCListener(this); 添加访问网络权限 因为我们的App是访问网络的,当然得记得添加权限 4. 案例-智能继电器()智能继电器目前多用于控制家庭电器的断电与通电。智能继电器跟普通继电器的不同之处就是上面内置了蓝牙芯片,该蓝牙芯片允许手机蓝牙进行连接,然后接收手机蓝牙发送的指令,根据不同的指令打开或者关闭开关,从而间接实现控制家用电器的功能。4.1 准备工作 智能继电器从网上购买了蓝牙继电器。产品详情链接(可能有做广告嫌疑):/item.htm?id=44157073788&spm=a1z033.cmtDUE&_u=2am3rd62f16 灯泡组 电池 电线 螺丝刀工具等该继电器是针对220v居民用电设计的,但是我们是实验的用途因此用3v的电池即可,灯泡就是用发光二极管即可,这样保证了绝对的安全。发光二极管详情:/item.htm?idspm=a1z000.cmtDUE&_u=2am3rd662b0 不需要开发SDK,只需要知道继电器蓝牙的指令集即可,在购买的界面商家提供了所有的指令集4.2 工作原理手机搜索到继电器的蓝牙,然后通过蓝牙的配对密码连接上继电器,继电器就是开关,只不过这里用的是继电器上有多个开关组,手机通过蓝牙给继电器发送指令,继电器把指令解析成相应的开或者关的动作,这样就实现了手机控制电器的操作。我自己做成以后的真实图如下。中间方形的是蓝牙继电器,右侧是发光二极管,二极管使用干电池供电。手机通过软件控制灯泡的开和关。4.3 代码实现软件总共有2个界面,运行效果图如下所示。第一个界面用于查找周围的蓝牙设备。将找到的蓝牙用ListView显示出来,然后点击智能继电器对应的蓝牙设备,进入第二个界面,在第二个界面完成对智能继电器的多种操作。 activity_main.xml对应第一个界面: activity_control.xml对应第二个界面 MainActivity.java是入口Activitypackage com.example.bluetoothtest;import java.util.ArrayList;import android.support.v7.app.Ac
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- GB/T 33288-2025语言培训服务教学人员评价
- 天津幼儿考试试题及答案
- 风险评估模型-第9篇-洞察及研究
- 2025年高校教师资格证之高等教育心理学考试题库(附答案)
- 产品技术协议管理办法
- 警用装备仓库管理办法
- 质量奖战略管理办法
- 行政岗位竞聘管理办法
- 螺栓周转桶管理办法
- 规范财务资产管理办法
- 2024-2029年中国直接半导体激光器行业市场现状供需分析及市场深度研究发展前景及规划战略投资分析研究报告
- 2024年水域救援安全及基础理论知识考试题库(附含答案)
- GB/T 43933-2024金属矿土地复垦与生态修复技术规范
- 2023年考研政治真题(含答案及解析)
- 叉车考试题库模拟试题大全及答案
- 2024电工(三级)职业技能等级认定理论考试复习题库(含答案)
- 锅炉安全培训教材(大全)
- 义齿工厂开设策划方案
- (完整版)中医适宜技术课件
- 开学第一课自信与勇敢
- 《财政与金融》教学教案
评论
0/150
提交评论