本章主要是结合webview展示直播

app负责配网展示设备

加载webview播放

不介绍别的只说集成,至于APP_KEY、accessToken怎么获取的不予解释,官网都有

获取WiFi名称

这里有个隐藏bug,如果APP没有获取定位权限就获取不到WiFi名称,好厉害,不知道定位权限和获取WiFi名称有啥关系,有知道的大神求告知

private String getWIFISSID(Activity activity){
String ssid = "unknown id";
WifiManager wifiManager = (WifiManager) activity.getApplicationContext().getSystemService(WIFI_SERVICE);
WifiInfo wifiInfo = wifiManager.getConnectionInfo();
Log.d("wifiInfo", wifiInfo.toString());
Log.d("SSID",wifiInfo.getSSID());
return wifiInfo.getSSID().replaceAll("\\\"","");
}  

点击配置网络按钮

private void addWifi() {

        final Thread thread = new Thread(new Runnable() {
@Override
public void run() {
Log.d("aaaaaaaa",deviceNumber+" "+deviceType);
result = EZOpenSDK.getInstance().probeDeviceInfo(deviceNumber, deviceType); if (result.getBaseException() == null) {
//已经配网成功添加平台
runOnUiThread(new Runnable() {
@Override
public void run() {
addVideoDeviceToYs();
}
});
} else {
runOnUiThread(new Runnable() {
@Override
public void run() {
int code = result.getBaseException().getErrorCode();
setWifiToDevice(code);
}
});
} }
}); thread.start();
}

  

//将摄像头添加到萤石服务器
private void addVideoDeviceToYs() {
EZOpenSDK.getInstance().stopConfigWiFi();
HttpRequest.addVideoDeviceToYs(deviceNumber, deviceAuthCode, this);
showWaitDialog("设备平台注册中...", false);
} //返回处理
成功进入下一步
失败提示
//为设备配网
private void setWifiToDevice(final int code) {
try {
switch (code) {
case 120023:// 设备不在线,未被用户添加 (这里需要网络配置)
case 120002:// 设备不存在,未被用户添加 (这里需要网络配置)
// startTimer();
// setWifForOne(code);
// break;
case 120029:// 设备不在线,已经被自己添加 (这里需要网络配置)
// startTimer();
// setWifForOne(code);
runOnUiThread(new Runnable() {
@Override
public void run() {
if (result.getEZProbeDeviceInfo() == null){
dismissWaitDialog();
// 未查询到设备信息,不确定设备支持的配网能力,需要用户根据指示灯判断
//若设备指示灯红蓝闪烁,请选择smartconfig配网
//若设备指示灯蓝色闪烁,请选择设备热点配网
}else{
// 查询到设备信息,根据能力级选择配网方式
try {
if (result.getEZProbeDeviceInfo().getSupportAP() == 2) {
dismissWaitDialog();
//选择设备热单配网
showWaitDialog("设备配网中", false); EZOpenSDK.getInstance().startAPConfigWifiWithSsid(wifiSsid, etWifiPd.getText().toString().trim(), deviceNumber, deviceAuthCode, new APWifiConfig.APConfigCallback() {
@Override
public void onSuccess() {
dismissWaitDialog(); EZOpenSDK.getInstance().stopAPConfigWifiWithSsid();
deviceCode = code;
handler.sendEmptyMessage(1); } @Override
public void OnError(int i) {
dismissWaitDialog();
EZOpenSDK.getInstance().stopAPConfigWifiWithSsid();
// stopTimer();
switch (i) {
case 15:
// TODO: 2018/7/24 超时
ToastUtils.showToast("超时");
break;
case 1:
// TODO: 2018/7/24 参数错误
ToastUtils.showToast("参数错误");
break;
case 2:
// TODO: 2018/7/24 设备ap热点密码错误
ToastUtils.showToast("设备ap热点密码错误");
break;
case 3:
// TODO: 2018/7/24 连接ap热点异常
ToastUtils.showToast("连接ap热点异常");
break;
case 4:
// TODO: 2018/7/24 搜索WiFi热点错误
ToastUtils.showToast("搜索WiFi热点错误");
break;
default:
// TODO: 2018/7/24 未知错误
ToastUtils.showToast("未知错误");
break;
}
}
});
}
if (result.getEZProbeDeviceInfo().getSupportWifi() == 3) {
//选择smartconfig配网
}
if (result.getEZProbeDeviceInfo().getSupportSoundWave() == 1) {
//选择声波配网
startTimer();
setWifForOne(code);
}
} catch (Exception e) {
e.printStackTrace();
ToastUtils.showToast("未知错误");
Log.d("aaaa",""+e.toString());
}
}
}
});
break;
case 120020:// 设备在线,已经被自己添加 (给出提示)
ToastUtils.showToast("设备在线,已经被自己添加 ");
break;
case 120022:// 设备在线,已经被别的用户添加 (给出提示)
ToastUtils.showToast("设备在线,已经被别的用户添加 ");
break;
case 120024:// 设备不在线,已经被别的用户添加 (给出提示)
ToastUtils.showToast("设备不在线,已经被别的用户添加 ");
break;
default: //请求异常
ToastUtils.showToast("设备异常,请联系客服");
break; }
} catch (Exception e) {
e.printStackTrace();
Log.d("aaaa",""+e.toString());
}
}
private Handler handler=new Handler(){
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
if (msg.what==1){
new AlertDialog.Builder(VideoDevicePairingActivity.this).setTitle("添加到视频平台")
.setMessage("请将设备添加到视频平台").setNegativeButton("确定", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
if (deviceCode == 120029) {
goToAddVideoDevice();
} else {
addVideoDeviceToYs();
}
}
}).setCancelable(false).create().show();
}
}
};
//开启定时器
private void startTimer() {
stopTimer();
myTimer = new Timer();
myTimerTask = new TimerTask() {
@Override
public void run() {
/*
* 停止Wifi配置
*/
EZOpenSDK.getInstance().stopConfigWiFi();
if (waitDialog != null) {
dismissWaitDialog();
}
}
}; myTimer.schedule(myTimerTask, 30000);
} //关闭定时器
private void stopTimer() {
if (waitDialog != null) {
dismissWaitDialog();
}
if (myTimer != null) {
myTimer.cancel();
myTimer = null;
} if (myTimerTask != null) {
myTimerTask.cancel();
myTimerTask = null;
}
}
private void setWifForOne(final int code) { showWaitDialog("设备配网中", false);
String password = etWifiPd.getText().toString().trim();
if (TextUtils.isEmpty(password)) {
ToastUtils.showToast("请输入wifi密码");
} else {
/*
* 开始WiFi配置
* @since 4.8.3
* @param context 应用 activity context
* @param deviceSerial 配置设备序列号
* @param ssid 连接WiFi SSID
* @param password 连接 WiFi 密码
* @param mode 配网的方式,EZWiFiConfigMode中列举的模式进行任意组合(EZWiFiConfigMode.EZWiFiConfigSmart:普通配网;EZWiFiConfigMode.EZWiFiConfigWave:声波配网),例
* 如:EZWiFiConfigMode.EZWiFiConfigSmart|EZWiFiConfigMode.EZWiFiConfigWave
* @param back 配置回调
*/
EZOpenSDK.getInstance().startConfigWifi(this, deviceNumber, wifiSsid, password,
EZConstants.EZWiFiConfigMode.EZWiFiConfigSmart | EZConstants.EZWiFiConfigMode.EZWiFiConfigWave,
new EZOpenSDKListener.EZStartConfigWifiCallback() {
@Override
public void onStartConfigWifiCallback(final String s, final EZConstants.EZWifiConfigStatus ezWifiConfigStatus) {
VideoDevicePairingActivity.this.runOnUiThread(new Runnable() {
@Override
public void run() { if (ezWifiConfigStatus == EZConstants.EZWifiConfigStatus.DEVICE_WIFI_CONNECTED) {
// EZOpenSDK.getInstance().stopConfigWiFi();
//设备wifi连接成功 停止定时器 停止噪音
// EZOpenSDK.getInstance().stopConfigWiFi();
//设备注册到平台成功,可以调用添加设备接口添加设备
stopTimer();
} else if (ezWifiConfigStatus == EZConstants.EZWifiConfigStatus.DEVICE_PLATFORM_REGISTED) {
EZOpenSDK.getInstance().stopConfigWiFi(); new AlertDialog.Builder(VideoDevicePairingActivity.this).setTitle("添加到视频平台")
.setMessage("请将设备添加到视频平台").setNegativeButton("确定", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
if (code == 120029) {
goToAddVideoDevice();
} else {
addVideoDeviceToYs();
}
}
}).setCancelable(false).create().show(); }
}
});
}
});
} }

  

  
好像就是这么多,如果没成功再联系,检查这没有遗漏代码
至于添加成功之后,就是H5了
https://www.cnblogs.com/leshen/p/12627445.html Android 伤敌一千自损八百之萤石摄像头集成(三)

  

Android 伤敌一千自损八百之萤石摄像头集成(二)的更多相关文章

  1. Android 伤敌一千自损八百之萤石摄像头集成(一)

    最近忙着修改萤石摄像头C3型号开头的设备添加 本来不是很复杂的事情. , 现在我感觉我入魔了 总感觉这是个小人 螺丝口是眼睛 插入SD卡的事鼻子嘴 接信号的事手 怎么看怎么像愤怒的小人 总结,先看一下 ...

  2. Android 伤敌一千自损八百之萤石摄像头集成(三)

    说一下萤石原生播放 先上代码 private MyOrientationDetector mOrientationDetector; @Override protected void onCreate ...

  3. (转载)Android项目实战(二十八):使用Zxing实现二维码及优化实例

    Android项目实战(二十八):使用Zxing实现二维码及优化实例 作者:听着music睡 字体:[增加 减小] 类型:转载 时间:2016-11-21我要评论 这篇文章主要介绍了Android项目 ...

  4. 如何一步一步用DDD设计一个电商网站(八)—— 会员价的集成

    阅读目录 前言 建模 实现 结语 一.前言 前面几篇已经实现了一个基本的购买+售价计算的过程,这次再让售价丰满一些,增加一个会员价的概念.会员价在现在的主流电商中,是一个不大常见的模式,其带来的问题是 ...

  5. Android RecyclerView单击、长按事件:基于OnItemTouchListener +GestureDetector标准实现(二),封装抽取成通用工具类

     Android RecyclerView单击.长按事件:基于OnItemTouchListener +GestureDetector标准实现(二),封装抽取成通用工具类 我写的附录文章2,介绍了 ...

  6. 20162317袁逸灏 第八周实验报告:实验二 Java面向对象程序设计

    20162317袁逸灏 第八周实验报告:实验二 Java面向对象程序设计 实验内容 初步掌握单元测试和TDD 理解并掌握面向对象三要素:封装.继承.多态 初步掌握UML建模 熟悉S.O.L.I.D原则 ...

  7. Spring Boot(十八):使用Spring Boot集成FastDFS

    Spring Boot(十八):使用Spring Boot集成FastDFS 环境:Spring Boot最新版本1.5.9.jdk使用1.8.tomcat8.0 功能:使用Spring Boot将文 ...

  8. Android集成二维码扫描功能

    文章转载自  https://github.com/yipianfengye/android-zxingLibrary 在具体介绍该扫描库之前我们先看一下其具体的使用方式,看看是不是几行代码就可以集成 ...

  9. Android开发教程 - 使用Data Binding(八)使用自定义Interface

    本系列目录 使用Data Binding(一)介绍 使用Data Binding(二)集成与配置 使用Data Binding(三)在Activity中的使用 使用Data Binding(四)在Fr ...

随机推荐

  1. Java实现 LeetCode 225 用队列实现栈

    225. 用队列实现栈 使用队列实现栈的下列操作: push(x) – 元素 x 入栈 pop() – 移除栈顶元素 top() – 获取栈顶元素 empty() – 返回栈是否为空 注意: 你只能使 ...

  2. Java实现 蓝桥杯VIP 算法提高 统计单词数

    算法提高 统计单词数 时间限制:1.0s 内存限制:512.0MB 问题描述 统计输入英文文章段落中不同单词(单词有大小写之分, 但统计时忽略大小写)各自出现的次数. 输入段落中所含单词的总数不超过1 ...

  3. java实现洛谷P1308统计单词数

    题目描述 一般的文本编辑器都有查找单词的功能,该功能可以快速定位特定单词在文章中的位置,有的还能统计出特定单词在文章中出现的次数. 现在,请你编程实现这一功能,具体要求是:给定一个单词,请你输出它在给 ...

  4. 树莓派使用 OLED 屏显示图片及文字

    树莓派默认是不带显示屏的,如果想要查看系统的一些信息,需要使用电脑登录到树莓派,或者通过 HDMI 连接外接显示器查看.这样做总是有点麻烦,我们可以通过外接一个 OLED 屏来显示一些关键参数或者图片 ...

  5. linux安装redis-6.0.1单机和集群

    redis作为一个直接操作内存的key-value存储系统,也是一个支持数据持久化的Nosql数据库,具有非常快速的读写速度,可用于数据缓存.消息队列等. 一.单机版安装 1.下载redis 进入re ...

  6. Spting:基于注解的组件化管理

    @Component,@Controller(控制层),@Service(业务层),@Repository(持久层) 以上四个注解的功能完全相同,不过在实际开发中,要在不同功能的类上加上响应的注解 1 ...

  7. Springboot搭建Eureka并设置Eureka登录账号密码

    Springboot搭建Eureka并设置Eureka登录账号密码 一.创建一个springboot项目 1.可以使用Spring Initializr,用浏览器打开http://start.spri ...

  8. SQL2008R2安装碰到问题的解决方法(iso文件用对应的工具)

    SQL2008R2安装碰到问题的解决方法     安装谁不会啊,这么简单,是啊,可是匹配包时就不是那么顺利啊.就像以前的Ruby还专挑匹配版本的包一样,不像现在的Py自动为我们找,这是Mar 7贴在Q ...

  9. 一时技痒,撸了个动态线程池,源码放Github了

    阐述背景 线程池在日常工作中用的还挺多,当需要异步,批量处理一些任务的时候我们会定义一个线程池来处理. 在使用线程池的过程中有一些问题,下面简单介绍下之前遇到的一些问题. 场景一:实现一些批量处理数据 ...

  10. Eplan如何调用经常使用的自绘部件?

    Eplan如何调用经常使用的自绘部件?采用宏的简单应用,即可. 参考文档:https://blog.csdn.net/txwtech/article/details/90510106