美文网首页
专微App相关介绍

专微App相关介绍

作者: Darren的徒弟 | 来源:发表于2020-04-20 11:07 被阅读0次

    一. 概述

    专微App是一款面向互联网的语音对讲系统的应用,整体架构借鉴了局域网开发语音对讲项目,首先通过UDP广播在mq服务器上发送并接受数据,实现局域网内的语音对讲,然后通过http协议与网络服务器建立连接,实现互联网语音对讲。

    二. 局域网语音对讲实现原理

    具体项目参考项目地址:

    目前已实现的功能:

    相关知识体系架构可参考:

    三. 网络连接实现原理

    通过c/s架构采用http协议建立与网络服务器之间的连接。客户端采用okhttputils工具类实现访问网络服务器请求接口,用户登录成功后建立与网络服务器的连接。

    四. 项目整体架构及涉及到的开源库

    四. 项目应用技术

    1.为实现黑屏起麦这一功能,首先通过注册系统白名单,保证应用进程不被后台回收杀死,另一方面保证在一个tcp上的socket通信利用心跳保持长连接。

    2.无法注册白名单的终端采用service双进程守护尽可能地保证进程不被杀死,原理是通过aidl跨进程通信实现两个进程间的相互调用。

    3.客户端与服务器建立tcp socket的长连接,登录群组聊天室上传信息到mq服务器,某个客户端通过顶层socket协议向服务器发送实时语音,再由mq服务器对语音socket通信发送给客户端,接受者通过用户id和所在群组判断接受的语音信息。

    五. 交接具体问题

    1.C10终端加入白名单的具体操作步骤?

    交接文件中的PC_Tools_R01.00.01文件中执行PCTools.exe文件,点击配置查看应用白名单,如果应用未注册白名单,点击应用白名单添加应用名称即可,包括添加C10键值也是一样,添加好之后点击写入等待系统重启即可。

    2.中山警铃上架过程

    更新版本代码之后,升级versionCode和versionName两个参数,导出最新版本的应用包,联系中山警铃上架应用的负责人刘中明,微信号lzm61818,提供.apk的文件和这两个参数即可上架

    3.专微GIT上的分支介绍

    目前版本的VisionClient在Gitblit上的所有分支已经合并,只有一个主分支,二具体产生的两个版本则是由AndroidManifest.xml文件控制,中山版本LAUNCHER进程启动的是LoginActivity,而北京启动的是LoginActivityForBJ。中山版本和北京版本另一个区别是有无图标启动也就是是否有
    以北京的版本为例:

    
          <activity
                android:exported="true"
                android:name=".activity.LoginActivityForBJ"
                android:hardwareAccelerated="false"
                android:screenOrientation="portrait"
                android:windowSoftInputMode="stateHidden|stateUnchanged"
                android:label="@string/app_name">
                <intent-filter>
                        <action android:name="android.intent.action.MAIN" />
                   <!-- <data android:host=".activity.loginactivity" android:scheme="com.vision.dev" />-->
                        <category android:name="android.intent.category.LAUNCHER" />
    
                </intent-filter>
    
        </activity>
    
    

    中山的版本只需要把LoginActivityForBJ改成LoginActivity,并把注释的这行隐式即可。

    <data android:host=".activity.loginactivity" android:scheme="com.vision.dev" />
    
    4.一些代码上需要注意的地方

    代码核心部分其实就两点:
    1.网络通信
    2.线程池
    前期各项参数集中在ConnectionModel类中,参数设置完毕后与服务器建立连接,代码关键部分集中在HistoryFragment中,包括连接后点击先向网络服务器发送请求后得到success后才能发送语音数据信息,语音的各种信息封装在一个MessageBean中,接受的语音通过流的形式传递到创建的语音文件中,语音的数据通过线程池方式发送和接收,

    ExecutorService threadPool = Executors.newCachedThreadPool();
    

    利用的是5种线程池中的缓存线程池:newCachedThreadPool()创建,五个参数分别是ThreadPoolExecutor(0, Integer.MAX_VALUE, 60L, TimeUnit.SECONDS, new SynchronousQueue())。
    含义是池中不保持固定数量的线程,随需创建,最多可以创建Integer.MAX_VALUE个线程(说一句,这个数量已经大大超过目前任何操作系统允许的线程数了),空闲的线程最多保持60秒,多余的任务在SynchronousQueue中等待。
    客户端发送时通过线程池发送有确认发送connection参数等信息的ReadDataThread到服务端,接受的时候通过判断接收参数connection的回调来实现对于接收信息的监听(connection实现了底层对于监听回调的监听,直接用就行)

    附专微App交接文件网盘下载地址:

    链接:https://pan.baidu.com/s/1-s2OkVRtInBq6bXlIz6Y3g

    提取码:ylwo

    相关文章

      网友评论

          本文标题:专微App相关介绍

          本文链接:https://www.haomeiwen.com/subject/lqkrihtx.html