<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[MMsmileNN的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/MMsmileNN</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; MMsmileNN]]></copyright><item><title><![CDATA[热更新笔记]]></title><link>https://blog.youkuaiyun.com/MMsmileNN/article/details/118612268</link><guid>https://blog.youkuaiyun.com/MMsmileNN/article/details/118612268</guid><author>MMsmileNN</author><pubDate>Fri, 09 Jul 2021 18:03:48 +0800</pubDate><description><![CDATA[https://bugly.qq.com/docs/user-guide/instruction-manual-android-hotfix-demo/?v=20200622202242

1. 集成

1.添加插件依赖

工程根目录下“build.gradle”文件中添加：


buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        // tinkersupport插件, 其中lastest..]]></description><category></category></item><item><title><![CDATA[kotlin中的协程]]></title><link>https://blog.youkuaiyun.com/MMsmileNN/article/details/118223455</link><guid>https://blog.youkuaiyun.com/MMsmileNN/article/details/118223455</guid><author>MMsmileNN</author><pubDate>Fri, 25 Jun 2021 16:28:11 +0800</pubDate><description><![CDATA[协程Coroutine





runBlocking协程构造器（阻塞的）


runBlocking&lt;Unit&gt; { …… } 作为用来启动顶层主协程的适配器


GlobalScop全局协程（非阻塞）


1. 可以将 GlobalScope.launch { …… } 替换为 thread { …… }
2. 将 delay(……) 替换为 Thread.sleep(……)
3.  delay 是一个特殊的***挂起函数***
4.  GlobalScope.launch启动一个协程，这]]></description><category></category></item><item><title><![CDATA[kotlin编写gradle]]></title><link>https://blog.youkuaiyun.com/MMsmileNN/article/details/118223401</link><guid>https://blog.youkuaiyun.com/MMsmileNN/article/details/118223401</guid><author>MMsmileNN</author><pubDate>Fri, 25 Jun 2021 16:18:22 +0800</pubDate><description><![CDATA[kotlin编写gradle

gradle是一种自动化构建工具（编译，测试，打包等功能）

第一版gradle由groovy语言编写，现选择kotlin语言


动态语言（python,groovy,javascript):需要有相应的动作来认定这个函数是干嘛的，运行的时候才知道
静态语言（kotlin,java）：不需要了解其他的，创建就能知道它是什么，做什么用的（编译的时候就能知道）


idea新建gradle工程，使用kotlin语言的名称以kts为后缀的

设置kolin与java得混合调用

]]></description><category></category></item><item><title><![CDATA[Kotlin高级函数]]></title><link>https://blog.youkuaiyun.com/MMsmileNN/article/details/118223351</link><guid>https://blog.youkuaiyun.com/MMsmileNN/article/details/118223351</guid><author>MMsmileNN</author><pubDate>Fri, 25 Jun 2021 16:16:03 +0800</pubDate><description><![CDATA[集合

集合类型

Kotlin 标准库提供了基本集合类型的实现： set、list 以及 map。 一对接口代表每种集合类型：


一个 只读 接口，提供访问集合元素的操作。
一个 可变 接口，通过写操作扩展相应的只读接口：添加、删除和更新其元素。


注：


	只读集合类型是型变的。 这意味着，如果类 Rectangle 继承自 Shape，则可以在需要 List的任何地方使用 List。 换句话说，集合类型与元素类型具有相同的子类型关系。 map 在值（value）类型上是型变的，但在键（key..]]></description><category></category></item><item><title><![CDATA[kotlin关键字]]></title><link>https://blog.youkuaiyun.com/MMsmileNN/article/details/118223184</link><guid>https://blog.youkuaiyun.com/MMsmileNN/article/details/118223184</guid><author>MMsmileNN</author><pubDate>Fri, 25 Jun 2021 16:10:57 +0800</pubDate><description><![CDATA[关键字 说明


abstract    抽象声明，被标注对象默认是open
annotation  注解声明
by  类委托、属性委托
class   声明类
companion   伴生对象声明
const   声明编译期常量
constructor 声明构造函数
crossinline 标记内联函数的lambda表达式参数，标识该lambda函数返回为非局部返回，不允许非局部控制流
data    数据类，声明的类默认实现equals()/hashCode()/toString/copy()/comp]]></description><category></category></item><item><title><![CDATA[kotlin基础语法]]></title><link>https://blog.youkuaiyun.com/MMsmileNN/article/details/118222974</link><guid>https://blog.youkuaiyun.com/MMsmileNN/article/details/118222974</guid><author>MMsmileNN</author><pubDate>Fri, 25 Jun 2021 16:09:47 +0800</pubDate><description><![CDATA[kotlin中文站很多都做了讲解，以下只是在学习过程中的记录，更详细可进入kotlin中文网

定义函数

使用fun关键字声明


	带有两个 Int 参数、返回 Int 的函数

	
fun sum(a: Int, b: Int): Int {
return a + b
}

	
	
	将表达式作为函数体、返回值类型自动推断的函数

	
fun sum(a: Int, b: Int) = a + b

	
	
	函数返回无意义的值"Unit"(java是“void”)

	
fun printSum(.]]></description><category></category></item><item><title><![CDATA[Android模块化开发]]></title><link>https://blog.youkuaiyun.com/MMsmileNN/article/details/118219750</link><guid>https://blog.youkuaiyun.com/MMsmileNN/article/details/118219750</guid><author>MMsmileNN</author><pubDate>Fri, 25 Jun 2021 14:12:28 +0800</pubDate><description><![CDATA[组件化开发项目搭建

1.为什么要组件化开发

随着APP版本不断的迭代，新功能的不断增加，业务也会变的越来越复杂，APP业务模块的数量有可能还会继续增加，而且每个模块的代码也变的越来越多，这样发展下去单一工程下的APP架构势必会影响开发效率，增加项目的维护成本，每个工程师都要熟悉如此之多的代码，将很难进行多人协作开发，而且Android项目在编译代码的时候电脑会非常卡，又因为单一工程下代码耦合严重，每修改一处代码后都要重新编译打包测试，导致非常耗时，最重要的是这样的代码想要做单元测试根本无从下手，所以必须]]></description><category></category></item><item><title><![CDATA[freeswitch自启动设置]]></title><link>https://blog.youkuaiyun.com/MMsmileNN/article/details/118216663</link><guid>https://blog.youkuaiyun.com/MMsmileNN/article/details/118216663</guid><author>MMsmileNN</author><pubDate>Fri, 25 Jun 2021 12:01:36 +0800</pubDate><description><![CDATA[设置freeswitch自启动

本文描述在CentOS7系统上设置freeswitch的自启动。程序安装在/usr/local/目录，用户是root

1. 在目录/usr/lib/systemd/system下创建文件freeswitch.service，内容如下：


[Unit]
Description=FreeSWITCH
After=syslog.target network.target
After=postgresql.service postgresql-9.3.service postg]]></description><category></category></item><item><title><![CDATA[freeswitch实战十（sip外呼设置）]]></title><link>https://blog.youkuaiyun.com/MMsmileNN/article/details/118178826</link><guid>https://blog.youkuaiyun.com/MMsmileNN/article/details/118178826</guid><author>MMsmileNN</author><pubDate>Fri, 25 Jun 2021 11:56:23 +0800</pubDate><description><![CDATA[配置sip拨打外部电话


1. 添加一个网关
    1. 在 \conf\sip_profiles\external 中添加一个名为gw1.xml的文件，内容如下
    &lt;gateway name="gw1"&gt;
        &lt;param name="realm" value="39.107.42.245:5060"/&gt;
        &lt;param name="username" value="51300140"/&gt;
        &lt;param name]]></description><category></category></item><item><title><![CDATA[freeswitch实战九（用户管理模块）]]></title><link>https://blog.youkuaiyun.com/MMsmileNN/article/details/118178778</link><guid>https://blog.youkuaiyun.com/MMsmileNN/article/details/118178778</guid><author>MMsmileNN</author><pubDate>Thu, 24 Jun 2021 10:13:09 +0800</pubDate><description><![CDATA[PHP批量创建用户注册

centOS7下


1. 安装mod_xml_curl模块
    1. 在源码目录下：
    2. make mod_xml_curl &amp;&amp; make mod_xml_curl-install
2. cd /usr/local/freeswitch/conf/autoload_configs/目录下的modules.conf.xml文件取消
    1. &lt;!-- &lt;load module="mod_xml_curl"/&gt; --&gt;的注释]]></description><category></category></item><item><title><![CDATA[freeswitch项目需要的模块]]></title><link>https://blog.youkuaiyun.com/MMsmileNN/article/details/118178698</link><guid>https://blog.youkuaiyun.com/MMsmileNN/article/details/118178698</guid><author>MMsmileNN</author><pubDate>Thu, 24 Jun 2021 10:11:30 +0800</pubDate><description><![CDATA[FreeSWITCH的架构设计的非常好，可以通过动态加载模块来扩充功能。 通过源码安装的时候，FreeSWITCH缺失只安装了一些基本模块，还有很多模块并没有安装，可以通过如下的方法进行安装。

1. 声音模块


声音文件分为两种：一种提示音，用于通话期间的语音提示，如voicemail的提示音，支持TTS的提示音等。另一种是音乐，用于Hold状态的播放，即所谓的Music on Hold.
1. window上是默认安装，linux中需要在源码中添加
make sounds-install
make m]]></description><category></category></item><item><title><![CDATA[freeswitch开发逻辑顺序]]></title><link>https://blog.youkuaiyun.com/MMsmileNN/article/details/118178536</link><guid>https://blog.youkuaiyun.com/MMsmileNN/article/details/118178536</guid><author>MMsmileNN</author><pubDate>Thu, 24 Jun 2021 10:10:16 +0800</pubDate><description><![CDATA[1.首先开启fs，快速开发平台通过mod_xml_curl模块连接用户注册，通话路由，录音设置等
2.开启快速开发平台，开启服务，让fs的mod_xml_curl模块能连接到数据库，获取用户注册信息
3.功能，注册功能：可以 通过数据库，注册单个或则是多个用户，sip电话开启，fs查询数据库是否包含这个用户号，如果不包含就表明，用户注册失败
 只有注册过的用户，数据库存在的用户才能使用fs系统
4.路由功能：目前落地号一个，按照落地号一个对应一个分机，创建了一个call_in的呼入路由，所有呼入落地号...]]></description><category></category></item><item><title><![CDATA[freeswitch实战八（动态生成拨号计划）]]></title><link>https://blog.youkuaiyun.com/MMsmileNN/article/details/118178429</link><guid>https://blog.youkuaiyun.com/MMsmileNN/article/details/118178429</guid><author>MMsmileNN</author><pubDate>Thu, 24 Jun 2021 10:06:20 +0800</pubDate><description><![CDATA[动态生成拨号计划加动态录音设置

模块创建，动态dialplan的生成配置


1. 安装mod_xml_curl模块
    1. 在源码目录下：
    2. make mod_xml_curl &amp;&amp; make mod_xml_curl-install
2. cd /usr/local/freeswitch/conf/autoload_configs/目录下的modules.conf.xml文件取消
    1. &lt;!-- &lt;load module="mod_xml_curl]]></description><category></category></item><item><title><![CDATA[freeswitch实战七（话单）]]></title><link>https://blog.youkuaiyun.com/MMsmileNN/article/details/118178271</link><guid>https://blog.youkuaiyun.com/MMsmileNN/article/details/118178271</guid><author>MMsmileNN</author><pubDate>Thu, 24 Jun 2021 10:04:11 +0800</pubDate><description><![CDATA[使用modformatcdr模块传递json/xml进行HTTP服务接受话单

一、安装配置modformatcdr


1. 源码目录下打开vim modules.conf取消event_handlers/mod_format_cdr这一行的注释 ，如果没有，添加一行
2.源码目录下安装mod_format_cdr模块 
    make mod_format_cdr-install
3. 然后进入modules.conf.xml取消掉mod_format_cdr的注释即可自动加载
4. 加载模块load]]></description><category></category></item><item><title><![CDATA[freeswitch话单测试信息]]></title><link>https://blog.youkuaiyun.com/MMsmileNN/article/details/118178226</link><guid>https://blog.youkuaiyun.com/MMsmileNN/article/details/118178226</guid><author>MMsmileNN</author><pubDate>Thu, 24 Jun 2021 10:01:06 +0800</pubDate><description><![CDATA[originate_causes


接通后会有originator和originatee
内部通话：未接通会有originator，没有originatee
外部通话：呼入未成功都不会有


情况分为：
1.呼出
 1.内部分机通话 1005-1002
  接通：
  （两个）呼入号码：caller_id_number1005 呼出号码：destination_number：1002 落地号：rdnis：“” network_addr：域名
  ...]]></description><category></category></item><item><title><![CDATA[freeswitch呼入落地测试信息]]></title><link>https://blog.youkuaiyun.com/MMsmileNN/article/details/118178195</link><guid>https://blog.youkuaiyun.com/MMsmileNN/article/details/118178195</guid><author>MMsmileNN</author><pubDate>Thu, 24 Jun 2021 10:00:12 +0800</pubDate><description><![CDATA[insert into feeext(ext,label) select username,password from fs_user

event plain all
event filter Caller-Caller

//弹屏监听的事件
CHANNEL_PROGRESS

Caller-Caller-ID-Number 呼入号码

Caller-Callee-ID-Number 接听分机号

Caller-RDNIS 落地号


话单
//话单需要的字段
DIALSTATUS 呼叫成功失败
st..]]></description><category></category></item><item><title><![CDATA[freeswitch实战（自启动设置）]]></title><link>https://blog.youkuaiyun.com/MMsmileNN/article/details/118178114</link><guid>https://blog.youkuaiyun.com/MMsmileNN/article/details/118178114</guid><author>MMsmileNN</author><pubDate>Thu, 24 Jun 2021 09:58:42 +0800</pubDate><description><![CDATA[设置freeswitch自启动

本文描述在CentOS7系统上设置freeswitch的自启动。程序安装在/usr/local/目录，用户是root

1. 在目录/usr/lib/systemd/system下创建文件freeswitch.service，内容如下：


[Unit]
Description=FreeSWITCH
After=syslog.target network.target
After=postgresql.service postgresql-9.3.service postg]]></description><category></category></item><item><title><![CDATA[freeswitch实战六（呼叫转移）]]></title><link>https://blog.youkuaiyun.com/MMsmileNN/article/details/118178044</link><guid>https://blog.youkuaiyun.com/MMsmileNN/article/details/118178044</guid><author>MMsmileNN</author><pubDate>Thu, 24 Jun 2021 09:57:07 +0800</pubDate><description><![CDATA[freeswitch呼叫转移

协商转的配置


1. 在dialplan/public/my_did.xml 中添加以下配置
    &lt;action application="bind_mate_app" data="4 b s execute_extension::att_xfer xml features"&gt;
    4表示按*4激活，b表示定义在b-leg上，s表示激活后在相同的b-leg上执行，execute_extension::att_xfer xml features.xml中的]]></description><category></category></item><item><title><![CDATA[freewitch测试信息-cdr]]></title><link>https://blog.youkuaiyun.com/MMsmileNN/article/details/118147862</link><guid>https://blog.youkuaiyun.com/MMsmileNN/article/details/118147862</guid><author>MMsmileNN</author><pubDate>Thu, 24 Jun 2021 09:52:03 +0800</pubDate><description><![CDATA[xl-1002-13979123231-12321344
jq-1002-13979123231-12321344

jq-1002-13979123231-12321344
xl-1002-13979123231-12321344

 send("event plain all\r\n\r\n");
---------------------------------------------------------
启动话机状态回报服务................
FS客户端开始连接：
FS客户端04.]]></description><category></category></item><item><title><![CDATA[freeswitch实战五（应用配置）]]></title><link>https://blog.youkuaiyun.com/MMsmileNN/article/details/118147690</link><guid>https://blog.youkuaiyun.com/MMsmileNN/article/details/118147690</guid><author>MMsmileNN</author><pubDate>Wed, 23 Jun 2021 11:12:50 +0800</pubDate><description><![CDATA[呼叫中心应用配置

1.配置一个callin呼入的队列


1. 在conf/autoload_configs/callcenter.conf.xml中添加一个callin@default队列，"strategy"设置策列字段，包含轮循、最长等待时间等。
&lt;queues&gt;
    &lt;queue name="callin@default"&gt;
      &lt;param name="strategy" value="longest-idle-agent"/&gt;
      &lt]]></description><category></category></item></channel></rss>