本章主要是结合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 82 删除排序链表中的重复元素 II(二)

    82. 删除排序链表中的重复元素 II 给定一个排序链表,删除所有含有重复数字的节点,只保留原始链表中 没有重复出现 的数字. 示例 1: 输入: 1->2->3->3->4- ...

  2. Java实现 LeetCode 64 最小路径和

    64. 最小路径和 给定一个包含非负整数的 m x n 网格,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小. 说明:每次只能向下或者向右移动一步. 示例: 输入: [ [1,3,1], ...

  3. Android中如何使用Listview

    第一步 首先在xml文件中声明一个List View控件,并且标明id (这一步其实不用说,怕自学Android的小白不懂,就好比当初的我,哈哈) <?xml version="1.0 ...

  4. Java实现硬币收集问题

    1 问题描述 在n*m格木板中放有一些硬币,每格的硬币数目最多为一个,在木板左上方的一个机器人需要收集尽可能多的硬币并把它们带到右下方的单元格.每一步,机器人可以从当前的位置向右移动一格或向下移动一格 ...

  5. java实现平面4点最小距离

    已知平面上若干个点的坐标. 需要求出在所有的组合中,4个点间平均距离的最小值(四舍五入,保留2位小数). 比如有4个点:a,b,c,d, 则平均距离是指:ab, ac, ad, bc, bd, cd ...

  6. Java实现计数排序

    1 问题描述 给定一组数据,请使用计数排序,得到这组数据从小到大的排序序列. 2 解决方案 2.1比较计数排序 下面算法的时间复杂度为O(n^2),空间复杂度为O(n).此方法对于任意一组数据均可排序 ...

  7. .NET Web应用中为什么要使用async/await异步编程

    前言 什么是async/await? await和async是.NET Framework4.5框架.C#5.0语法里面出现的技术,目的是用于简化异步编程模型. async和await的关系? asy ...

  8. 解Bug之路-记一次JVM堆外内存泄露Bug的查找

    解Bug之路-记一次JVM堆外内存泄露Bug的查找 前言 JVM的堆外内存泄露的定位一直是个比较棘手的问题.此次的Bug查找从堆内内存的泄露反推出堆外内存,同时对物理内存的使用做了定量的分析,从而实锤 ...

  9. Dedecms中{dede:type}标签支持调用父级栏目名称

    需求: 我们用{dede:type}标签调用栏目相关内容时,同时需要调用该栏目的父级栏目的名称. {dede:type}标签的代码做了一下开发,支持这个调用了. 开发方法: 1.打开include/t ...

  10. Cypress系列(22)- 可操作类型的命令 之 select()

    如果想从头学起Cypress,可以看下面的系列文章哦 https://www.cnblogs.com/poloyy/category/1768839.html .select() 在 <sele ...