Android 伤敌一千自损八百之萤石摄像头集成(二)
本章主要是结合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 伤敌一千自损八百之萤石摄像头集成(二)的更多相关文章
- Android 伤敌一千自损八百之萤石摄像头集成(一)
最近忙着修改萤石摄像头C3型号开头的设备添加 本来不是很复杂的事情. , 现在我感觉我入魔了 总感觉这是个小人 螺丝口是眼睛 插入SD卡的事鼻子嘴 接信号的事手 怎么看怎么像愤怒的小人 总结,先看一下 ...
- Android 伤敌一千自损八百之萤石摄像头集成(三)
说一下萤石原生播放 先上代码 private MyOrientationDetector mOrientationDetector; @Override protected void onCreate ...
- (转载)Android项目实战(二十八):使用Zxing实现二维码及优化实例
Android项目实战(二十八):使用Zxing实现二维码及优化实例 作者:听着music睡 字体:[增加 减小] 类型:转载 时间:2016-11-21我要评论 这篇文章主要介绍了Android项目 ...
- 如何一步一步用DDD设计一个电商网站(八)—— 会员价的集成
阅读目录 前言 建模 实现 结语 一.前言 前面几篇已经实现了一个基本的购买+售价计算的过程,这次再让售价丰满一些,增加一个会员价的概念.会员价在现在的主流电商中,是一个不大常见的模式,其带来的问题是 ...
- Android RecyclerView单击、长按事件:基于OnItemTouchListener +GestureDetector标准实现(二),封装抽取成通用工具类
Android RecyclerView单击.长按事件:基于OnItemTouchListener +GestureDetector标准实现(二),封装抽取成通用工具类 我写的附录文章2,介绍了 ...
- 20162317袁逸灏 第八周实验报告:实验二 Java面向对象程序设计
20162317袁逸灏 第八周实验报告:实验二 Java面向对象程序设计 实验内容 初步掌握单元测试和TDD 理解并掌握面向对象三要素:封装.继承.多态 初步掌握UML建模 熟悉S.O.L.I.D原则 ...
- Spring Boot(十八):使用Spring Boot集成FastDFS
Spring Boot(十八):使用Spring Boot集成FastDFS 环境:Spring Boot最新版本1.5.9.jdk使用1.8.tomcat8.0 功能:使用Spring Boot将文 ...
- Android集成二维码扫描功能
文章转载自 https://github.com/yipianfengye/android-zxingLibrary 在具体介绍该扫描库之前我们先看一下其具体的使用方式,看看是不是几行代码就可以集成 ...
- Android开发教程 - 使用Data Binding(八)使用自定义Interface
本系列目录 使用Data Binding(一)介绍 使用Data Binding(二)集成与配置 使用Data Binding(三)在Activity中的使用 使用Data Binding(四)在Fr ...
随机推荐
- Vue入门 — Vue + vuetifyjs应用实践
分享一个以前学vue时自己练手的一个小项目,项目使用vue-cli3创建,UI库用的是vuetifyjs,vuetifyjs官网:https://vuetifyjs.com/ 数据来源是网上随便找的一 ...
- k8s学习-Helm
4.9.Helm 4.9.1.简单使用 概念 文档:https://github.com/helm/helm/blob/master/docs/charts.md 阿里云apphub:https:// ...
- 测试-spring源码摘取
首次加载idea是真的慢... 也许是我电脑性能太差... 我分析他内部有一套索引的机制,需要每次打开现建立... 没有固态的话,首次打开还不如eclipse 第一次使用博客园,以前都在csdn混~ ...
- Spring boot添加配置类@Configuration并初始化@Bean,@Resource和@Autowired都为null
大写加黑,找了好久@Resource和@Autowired都依赖不到创建的bean的原因:@Bean的方法名即是创建的Bean名称 import org.activiti.engine.Process ...
- Springboot拦截器实现IP黑名单
Springboot拦截器实现IP黑名单 一·业务场景和需要实现的功能 以redis作为IP存储地址实现. 业务场景:针对秒杀活动或者常规电商业务场景等,防止恶意脚本不停的刷接口. 实现功能:写一个拦 ...
- VMWare虚拟机开启时显示模块“Disk”启动失败的解决方案
找到虚拟机所在的目录, 将 .vmx文件打开 将文件vmci0.present = "TRUE"改为 vmci0.present = "FALSE" 删除以.l ...
- 刷一遍《剑指Offer》,你还需要这些知识!(一刷)
因为时间紧和基础薄弱,一刷<剑指Offer>就变成了速看. 我按照: 1.看题目思考一会: 2.上网找找关于题目里不懂的知识点: 3.看评论和官方题解的解法,尽量看懂,并及时弄懂不懂的地方 ...
- Jmeter基础003----Jmeter组件之测试计划和线程组
一.测试计划 1.界面展示 测试计划是测试脚本的容器,主要是对测试脚本做总体设置.它定义了测试要执行什么,怎么执行(执行的).其界面如下图所示: 2.设置用户定义变量 在测试计划中定义的变量是在整 ...
- linear-gradient,radial-gradient 渐变
一.渐变效果 -> 线性渐变 方法: background-image: linear-gradient(direction, color-stop1, color-stop2, ...); ...
- Spring Cloud Alibaba系列(四)使用gateway作为服务网关
什么是网关 在微服务架构里,服务的粒度被进一步细分,各个业务服务可以被独立的设计.开发.测试.部署和管理.这时,各个独立部署单元可以用不同的开发测试团队维护,可以使用不同的编程语言和技术平台进行设计, ...