好多年前为了锻炼英文数字的敏感度做了一个 app。最近想更新一波,发现需要备案了。还需要有软著才能上应用市场。
因此提供一个下载地址供大家下载吧:
点击这里 或者扫码二维码


做一个有趣的人
好多年前为了锻炼英文数字的敏感度做了一个 app。最近想更新一波,发现需要备案了。还需要有软著才能上应用市场。
因此提供一个下载地址供大家下载吧:
点击这里 或者扫码二维码

这是一个简单的不能再简单的问题,然而,就是这样简单的常见问题,往往会被忽视,从而给未来的某一天埋坑。
大多数编程语言都提供了built-in 截取字符串的方法。
比如 Python最为简单直观,比如从”Hello, World!” 中提取出 World 可以通过下标直接获取
text = "Hello, World!" substring = text[7:12] print(substring) #print World
在 JS 中,String 也提供
text = "Hello, World!" substring = text.substring(7,12) print(substring) //print 'World'
在 Android 中,Kotlin 和 Java 的 String 同样有类似的方法:
val text = "Hello, World!" val substring = text.substring(7,12) print(substring) //print 'World'
相信你也一定写过上面的代码,但是真的会如你的预期得到想要的结果吗?
kotlin 的拓展函数,为这个语言带来极大的可玩性。可以极大的减少现有类的大小, 比如 string这个类 在Android 的 java实现中 有三千多行

但是在 Kotlin 版本中的 String类只有50多行,不到一屏。是不是匪夷所思
继续阅读“Kotlin 拓展函数”在众多介绍软件架构的书籍中,特别是 OOP 语言为基准的话,你一定听说过一句话“组合优于继承” 【Favor composition over inheritance】
为什么这么说? 我们来看一个例子。继承非常好理解,我们需要创建一只鸡,一只鸭,我们很容易抽象出“鸟类”这个父类。如下:
继续阅读“聊聊Kotlin中的继承和组合”我们看一些源码发现,一些源码,在范型前面添加了一些关键字 in 或者 out,这又是什么呢?比如 kotlin内置的 Comparable.kt

再比如,Collections.MutableIterable 接口

为什么会有一些加in,有一些加out 呢?了解这个之前我们来看下
泛型(Generics)是一种允许类、接口和方法操作任意类型(类型参数)的特性。泛型提供了一种类型安全的方式来处理对象集合和其他数据结构,而无需在编译时指定具体的类型。
举一个栗子:
继续阅读“Kotlin 范型中的in 和out 是什么?”最近开发使用Kotlin确实挺爽的,就在于这门语言足够现代化,和JetBrains家的编辑器结合起来更是无敌了,自动提示,编译优化都是很实用的,但这样基本也脱离不了这个生态了,话说今天使用List的遍历,居然有六种方式,使用哪种方式都可以。这样虽然看起来很庞大,看起来很难记的样子,但是好在编译器+idea足够聪明,记住一两种就OK了。这有点像是我们学习英语,随着对语义的更加紧准的表达,英文单词拓展到了十几二十万个。(方便的同时也会加大人们的记忆负担)
brandList.forEach {
println(it)
}
for (brand in brandList) {
println(brand)
}
for (index in 0 until brandList.size) {
println("$index:${brandList[index]}")
}
for (index in 0..brandList.lastIndex) {
println("$index:${brandList[index]}")
}
for (index in brandList.indices) {
println("$index:${brandList[index]}")
}
brandList.forEachIndexed { index, brand ->
println("$index:${brand}")
}
最近在看alexa 的 认证文档,记录几个关键概念:
FRR(Word-wake False Rejection Rate ) ,拒识率。没有唤醒次数/唤醒总次数
RAR(Response Accuracy Rate) 响应率,唤醒成功的次数/唤醒总次数
FAR(Wake-word False Alarm Rate) 误唤醒率
测试设备:
2个音响speaker(噪音+音频),3个笔记本,用于控制两个speaker,另一个记录,2个音响底座可调整高低。1个分贝仪
音频文件
最近在和蓝牙耳机厂商联调,被各种各样的术语搞得头昏脑涨。
蓝牙芯片厂商主要有两家,一个是CSR,剑桥的一家公司,被高通24亿美元收购,,另一家BCM, 博通,美国公司,印象中很多网卡就是他们家的。
简单的来说 app与蓝牙设备之间传输数据主要有以下方式
我最近在开发一个面向企业内部app的语音SDK,在和思必驰的基础SDK集成的过程中发现,思必驰提供的sdk 是AAR文件,而我需要输出的也是aar,这时候发现思必驰的aar是没有办法打包到我的aar中的(调用方会找不到那个aar),试了通用的方法,比如
flatDir {
dirs 'libs'
}
还是不能解决,最终想到的由第三方服务商解决办法有两个:
前一阵子做一个demo,想从底部弹出一个类似于dialog的布局,但是发现无论怎么发现两边都有一定留白(在android 8.1系统)搜索了一些资料,填埋了这个坑。
setStyle(DialogFragment.STYLE_NO_TITLE, R.style.Theme_Dialog) val window = dialog.window window.setGravity(Gravity.BOTTOM) //可设置dialog的位置 window.decorView.setPadding(0, 0, 0, 0) window.setBackgroundDrawable(ColorDrawable(Color.WHITE));//这句话还不能少 日了狗 val lp = window.attributes lp.width = WindowManager.LayoutParams.MATCH_PARENT //设置宽度充满屏幕 lp.height = WindowManager.LayoutParams.WRAP_CONTENT window.attributes = lp window.attributes.windowAnimations = R.style.DialogAnimation