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 ...
随机推荐
- java实现第五届蓝桥杯写日志
写日志 写日志是程序的常见任务.现在要求在 t1.log, t2.log, t3.log 三个文件间轮流 写入日志.也就是说第一次写入t1.log,第二次写入t2.log,... 第四次仍然 写入t1 ...
- Linux 文件特殊权限-SetGID
SUID只针对二进制可执行文件,而SGID可以针对二进制文件,这时它和SUID非常类似,命令执行在执行程序的时候,组身份变换为该文件的属组,最常见的locate命令,普通用户也可以搜索文件目录,它也可 ...
- Linux 重装MySQL
1.首先查看当前MySQL的安装情况,查找之前是否安装了MySQL rpm -qa|grep -i mysql 可以看到如下图: 因为我是使用的宝塔面板一键安装的LAMP,所以显示安装了bt-mysq ...
- css3图片防止变形
1.object-fit 由于图片原始大小都不一样,强行设定大小值会导致拉伸,如果不设定大小则参差不齐. 之前我们大多数用的 大多数都是利用background-size: cover 来避免对图片造 ...
- android-sdk-window的环境搭建以及appium简单录制脚本的使用
大家好,今天给大家带来的是appium的环境搭建以及简单的录制脚本,自学的过程中入了不少坑,下面给大家开始分享! 使用Appium录制脚本必备三大金刚:Appium-desktop(至于为什么用这个, ...
- 09.Django-数据库优化
Django查询数据库性能优化 现在有一张记录用户信息的UserInfo数据表,表中记录了10个用户的姓名,呢称,年龄,工作等信息. models文件 from django.db import mo ...
- 使用PD(Power Designer)设计数据库,并且生成可执行的SQL文件创建数据库(本文以SQL Server Management Studio软件执行为例)
下载和安装PD: 分享我的软件资源,里面包含了对PD汉化包(链接出问题时可以留言,汉化包只能对软件里面部分菜单栏汉化) 链接:https://pan.baidu.com/s/1lNt1UGZhtDV8 ...
- css3中的@font-face你真的了解吗
css3中的自定义字体方法@font-face @font-face属性可以让我们自定义网站字体属性,然后引用到想要应用该字体的元素上. 基本语法: @font-face { font-family: ...
- [CF914D]Sum the Fibonacci
题目 点这里看题目. 分析 我们先放宽条件,重新定义五元组\((a,b,c,d,e)\)如下: 1.\(1\le a,b,c,d,e\le n\). 2.\(s_a\&s_b= ...
- @gym - 100591D@ Fox Rocks
目录 @description@ @solution@ @accepted code@ @details@ @description@ 给定 N 个点以及 P 条单向道路 Ai -> Bi,每条 ...