自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

duo_shine的博客

duo_shine的博客

  • 博客(101)
  • 资源 (2)
  • 收藏
  • 关注

原创 蓝牙作为服务端广播,扫描不到或名称显示不全的问题原因

ble作为服务端广播

2023-04-04 17:32:25 574

原创 opencv 图像相似度对比

opencv 图像相似度对比

2022-07-01 23:32:40 2098

原创 集成腾讯TBS问题记录

周末好!前言:集成腾讯TBS遇到的问题记录,网上教程比较老了,大家不能照抄。比如,为了支持64位手机,添加.so的步骤,但在新版本,这个问题都已经被修复,我们只需要去官网下载最新的jar包或者通过依赖的方式就可以了下面的问题都是通过TbsReaderView显示文件遇到的问题。都解决了,但是QbSdk.openFileReader的方法我也试了一直处于加载文档,我就没研究了、x5内核加载时 onViewInitFinished回调一直返回false可能是第一次加载时正在下载内核时应用退出了,下次不.

2021-12-18 10:36:09 4007

原创 Chronometer从指定时间开始计时

Chronometer recordTimeView = findViewById(R.id.recordTimeView);//从29分钟开始计时long l = SystemClock.elapsedRealtime() - (29 * 60 * 1000);recordTimeView.setBase(l);recordTimeView.setFormat("%s");recordTimeView.start();recordTimeView.setOnChronometerTickLis

2021-11-27 16:48:09 584

原创 CameraX 三:获取预览流

前言话接上文,本篇将要学习如何获取预览流,有了预览流我们可以做很多场景,如人形、人脸、车牌识别,如推流到流媒体服务器等等。如果感到不适,强烈建议从CameraX 一看过来源码机票布局文件 <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal">

2021-07-08 21:45:22 2600 6

原创 CameraX 二:使用自带录像功能

前言话接上文,接着我们来学习下如何使用CameraX自带的录制视频功能增加录像功能(Android 11)布局文件 <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal"> <Button android:id=

2021-07-06 21:18:37 994 1

原创 CameraX 一:拍照、预览

什么是CameraX?CameraX是一个基于camera2的加强库,具有生命周期感知能力,有很多的自感知能力,比如我们不需要处理拍照旋转,它向后兼容至21.有没有必要升级到CameraX?现在,你只需要两行代码就能实现与预安装的相机相同的体验和功能(what)有生命周期感知能力更简单的使用方式自动解决设备的兼容性问题,减少代码量,比如自动确定可使用的最佳分辨率。包括其他宽高比、屏幕方向、旋转角度、预览大小,这些都交给CameraX反正有意思的东西我就必须要学。。我的计划大概是分为基础预

2021-07-06 21:10:13 1352 10

原创 Android静默升级的菜鸟教程

前言目前已知的实现方式:获取su,通过pm命令实现静默安装通过辅助功能实现静默安装(有弹窗,只是不需要手动点击安装)root,覆盖安装,将应用下载到system下后重启系统通过pm install实现静默安装,需要系统签名需要知道1.不是root过的手机就一定能通过Runtime.getRuntime().exec(“su”);代码获取root权限。虽然通过su或adb root可以切换到root,但是在代码中不同,在源码中有如下判断。 if (myuid != AID_ROOT

2021-06-24 22:18:58 5314 6

原创 仿抖音APP

所有资源及视频均来自抖音APP,代码用以学习目的,如有任何侵权请私信我删除。阉割了无数功能。大概实现了如下效果:录制的像素比较差,没注意上面竟然还留了黑边。。。下面是必读:登录的功能依赖于环信SDK,如果你要下载代码使用,可以将launcher页换为Main,或者你去环信官网申请个应用,免费的,填入key在代码中就可以使用了,没有环信key聊天功能无法使用哦,拍摄视频依赖于美摄SDK,免费版好像就是这么模糊,不知道收费会不会好一些,用过其他的但是注册用户太麻烦。所有滤镜及ui均出自美摄

2020-11-21 16:11:15 3109 2

原创 下拉刷新+抽屉

噢天啊,这个命名糟透了支持下拉刷新,且下拉时显示全屏。看下效果图吧。最后有完整代码本来是丝滑般顺畅,这模拟器卡出翔了。。。。下面说使用?支持添加header和content他们分别对应addHeaderView,addContentView。伪代码 val topPage = findViewById<TopPageLinearLayout>(R.id.topPage) val headerView = layoutInflater.inflate(R.layout.he

2020-08-13 20:08:40 350

原创 paging3.0一个简单的例子

paging3.0一个简单的例子本文使用kotlin,如果你使用java,那么官网有对应的java代码,建议学习官方文档,效果更佳基于 : def paging_version = "3.0.0-alpha03" implementation "androidx.paging:paging-runtime:$paging_version"是的,没有其他的库,我们可以专注于paging,真是一个简单的例子。先看下实现的效果,footer在paging3是可以自定义的,gif就弄了个加载完成的

2020-08-01 14:23:07 1218 3

原创 解决高德地图开启混淆后release不显示Marker

我使用了地图与定位SDK,奇怪的是我已经按照高德文档添加了混淆配置如下: #3D 地图 V5.0.0之后: -keep class com.amap.api.maps.**{*;} -keep class com.autonavi.**{*;} -keep class com.amap.api.trace.**{*;} #定位 -keep class com.amap.api.location.**{*;} -keep class com.amap.api.fence.*

2020-07-24 21:25:23 938

原创 ViewPager2

相比较于ViewPager,他新增了一些功能,垂直方向的支持ViewPager2可以在垂直方向上翻页,仅需要在布局文件添加一行代码<androidx.viewpager2.widget.ViewPager2xmlns:android="http://schemas.android.com/apk/res/android"android:id="@+id/pager"android:orientation="vertical" />这种场景应该极少,和多屏布局有滑动冲突从右到左的

2020-06-29 22:45:08 925

原创 组件嵌套组件时引用外部的wxss失效问题

需求是这样的,我有一个页面是公用的,我给抽成组件了,内部使用了weui提供的half-screen-dialog组件,但是在组件的wxss引入外部的wxss文件时并没有生效,如下@import "../../../miniprogram_npm/weui-miniprogram/weui-wxss/dist/style/weui.wxss";遂回去看小程序的文档,在自定义组件那里看到解决方法是:Component({ options: { styleIsolation: 'shared'

2020-05-09 17:59:26 846

原创 viewmodel:一个简单的例子

介绍ViewModel 类旨在以注重生命周期的方式存储和管理界面相关的数据。ViewModel 类让数据可在发生屏幕旋转等配置更改后继续存在(出自官方文档)。举个例子,如果系统销毁或重新创建界面控制器,则存储在其中的任何临时性界面相关数据都会丢失。例如,应用的某个 Activity 中可能包含用户列表。因配置更改而重新创建 Activity 后,新 Activity 必须重新提取用户列表。对于简...

2020-04-12 20:11:38 958

原创 justify-content: center无效

临危受命,N久没有碰小程序了,我只好拿起我半吊子的小程序开始干活!我的代码如下: display: flex; flex-direction: column; justify-content: space-around; align-items: center; height: 100%;想实现的是一个水平和垂直方向都居中的效果,如下:可一直都只能通过align-it...

2020-02-24 17:46:38 9053 1

原创 kotlin内部类

嵌套类class Outer { private val bar: Int = 1 class Nested { fun foo() = 2 }}val demo = Outer.Nested().foo() // == 2不允许访问外部类成员。相当于java的静态内部类的调用方式内部类class Outer { private val bar: Int = 1...

2019-12-18 18:02:28 508

原创 final性能与设计

前言:小知识点 出自《on java 8》-读后感前期绑定将一个方法的调用和主体关联起来称为绑定,若绑定发生在程序运行前,则为前期绑定,此工作交由编译期和链接器完成,例如在 C 语言中就只有前期绑定这一种方法调用。后期绑定后期绑定也称为动态绑定或运行时绑定,意味着在程序运行时根据对象的类型进行绑定,在运行时需要判断对象的类型,这种机制称为方法调用机制,java中除了static方法和fi...

2019-11-08 14:45:17 189

原创 接口与抽象是需求驱动的

认为接口是好的选择,从而使用接口不用具体类,这具有诱惑性。几乎任何时候,创建类都可以替代为创建一个接口和工厂。很多人都掉进了这个陷阱,只要有可能就创建接口和工厂。这种逻辑看起来像是可能会使用不同的实现,所以总是添加这种抽象性。这变成了一种过早的设计优化。任何抽象性都应该是由真正的需求驱动的。当有必要时才应该使用接口进行重构,而不是到处添加额外的间接层,从而带来额外的复杂性。这种复杂性非常显著,...

2019-09-25 16:36:42 181

原创 过时引用

什么是过时引用对象的引用被栈维护,且永远不会解除,这个对象将排除在垃圾回收之外,且该对象引用的其他对象亦是如此什么是内存泄露分配内存后无法释放内存并且有过时的引用,就会发生内存泄露我们为什么要避免内存泄露当维护对象的过期引用时会出现内存泄露由于内存占用的增加,性能会下降,极端情况下会导致磁盘分页,甚至内存溢出如何解决对象保留问题一旦对象的引用过期,将他们设置为null,设置为n...

2019-08-22 18:27:10 193

原创 java集合系列十三:LinkedHashSet源码解析

阅读本文你应该学习HashMap LinkedHashMap HashSet介绍继承HashSet类,通过LinkedHashMap来实现元素插入有序有序的非线程安全的具有fail-fast机制继承关系 继承类介绍HashSet:继承HashSet,通过HashSet的构造函数使用LinkedHashMap来实现元素按照插入顺序迭代Set:不包含重复元素的集合的顶层接口...

2019-06-18 22:00:35 158

原创 java集合系列十二:TreeSet源码解析

阅读本文前你应该先学习TreeMap介绍基础TreeMap实现元素按自然顺序排列或按指定的Comparator排序非线程安全具有fail-fast机制有序的(非索引序,默认是元素的自然排序,如A.B.C.D,或按用户指定的Comparator排序)继承关系 继承类介绍AbstractSet:该类提供了Set接口的基本实现,以减少实现该类所需要的工作NavigableSet:...

2019-06-18 21:48:20 233

原创 java集合系列十一:HashSet源码解析

你应该先学习HashMap介绍不能包含重复元素无序的底层使用HashMap允许存储null值不是线程安全的具有fail-fast机制继承关系 继承类介绍AbstractSet:该类提供了Set接口的基本实现,以减少实现该类所需要的工作Set:不包含重复元素的集合的顶层接口Cloneable:可被克隆Serializable:可被序列化源码解析 变量解析 构造函数...

2019-06-18 21:45:31 448

原创 java集合系列十:LinkedHashMap源码解析

你应该先看HashMap介绍扩展HashMap类并实现了Map接口哈希表+链表实现有序的键和值可以是任何类型,包括null非线程安全的具有fail-fast机制继承关系 继承类介绍继承自HashMap类并实现了Map接口变量解析(所有代码都不是完整的源码,而是精简过后的源码!结合源码食用更佳)由于其继承自HashMap,所以HashMap的一些参数对于LinkedHas...

2019-06-18 21:41:00 233

原创 java集合系列九:TreeMap源码解析

前提:阅读本文最好对红黑树有基本的了解介绍扩展AbstractMap类并实现NavigatebleMap接口访问和检索时间相当短,这使得TreeMap成为存储需要快速找到的大量排序信息的绝佳选择树实现适用于按自然顺序或自定义顺序遍历键(key)不允许键为Null非线程安全具有fail-fast机制继承关系 继承类介绍AbstractMap:继承AbstractMap,它实...

2019-06-18 21:37:51 186

原创 java集合系列八:HashTable源码解析

介绍实现Map接口(这意味着以键/值对的形式存储数据)哈希表实现不支持null值或null键Hashtable是同步的无序的具有fail-fast机制默认初始容量11(尽量维持奇数)默认加载因子.75f继承关系 继承类介绍Dictionary:虽然HashTable继承自Dictionary,但是此类已过时Map:实现Map接口(这意味着以键/值对的形式存储数据)变量解...

2019-06-18 21:34:39 165

原创 java集合系列七:HashMap源码解析

介绍哈希表实现,实现Map接口(这意味着以键/值对的形式存储数据)键和值可以是任何类型,包括null无序非线程安全的初始默认容量16负载因子默认0.75具有fail-fast机制扩容为原容量2倍继承关系 继承类介绍AbstractMap:继承AbstractMap,它实现了Map接口,提供了Map接口的基本实现Map:Map类集合的顶层接口,Map中存储的内容是键值对(...

2019-06-17 23:25:35 243

原创 java集合系列六:Map

map类集合的顶层接口,将键映射到值的对象!简单关系图:SortedMap按升序维护其条目根据键的自然顺序排序,或根据创建Comparator时提供的条目排序的SortedMap。Hashtable实现Map接口(这意味着以键/值对的形式存储数据)哈希表实现不支持null值或null键Hashtable是同步的无序的具有fail-fast机制默认初始容量11默认...

2019-06-17 23:13:46 151

原创 java集合系列五:LinkedList源码解析

介绍使用双向链表实现,由节点组成的数据结构LinkedList没有初始容量允许存储null值不是线程安全的可以通过迭代器遍历,具有fail-fast机制增删快继承关系 继承类介绍AbstractSequentialList:继承自AbstractList,重写了增删改查的方法,通过listIterator实现,这里可以不关注,毕竟LinkedList重写了这些方法,看起来它...

2019-06-17 23:10:48 160

原创 java集合系列四:Vector源码解析

介绍使用动态数组实现默认初始容量10默认扩容为原容量2倍具有fail-fast机制是线程安全的继承关系 继承类介绍和ArrayList的继承关系是一致的,就不重复了,没看过ArrayList的可以去看下变量解析(所有代码都不是完整的源码,而是精简过后的源码!结合源码食用更佳) //可扩容的动态数组 protected Object[] elementData;...

2019-06-17 23:06:19 128

原创 java集合系列三:ArrayList源码解析

接着Collection简单了解之后,开始学习ArrayList,这个集合在工作中比较常用,理解它更便于我们写出更优秀的代码介绍ArrayList是通过动态数组实现的允许存储Null值,这个所有通用的实现都可以存null值ArrayList是线程不安全的 毕竟很多情况下都不是多线程操作,锁会增加性能损耗,且不必要的同步可能导致死锁,需要同步集合可以参考java.util.concurre...

2019-06-17 23:01:53 150

原创 java集合系列二:Collection

Collection的继承关系如下:Collection集合层次的根接口,对集合一些常用方法的高度抽象,此接口通常用于需要最大通用性的情况下实现,但是JDK并没有提供此接口的任何直接实现,它提供了更具体的子接口如Set和List实现!Collection接口是list和set的顶级接口,其抽象了一些常用的公共方法,实现了Iterable接口,实现该接口以保证子类可以获取集合中元素的迭代器...

2019-06-17 22:59:38 145

原创 java集合系列一:前传

源码来自:JDK:jdk1.8.0_65关于阅读顺序理论上不要求按照任何顺序来阅读,但按照系列一.二…阅读有很多好处,比如Set依赖于Map实现,先看Map更容易理解Set关于源码所有文章的源码都不是完整的源码,而是精简过后的源码,减少篇幅 让理解很简单关于源码解析套路所有源码解析的流程基本都是一致的,从成员变量->增删改查的方法->增删改查用到的核心方法->以及扩...

2019-06-17 22:42:25 175

原创 小程序-转换

二进制字符串转整数/** * 二进制字符串转整数 如"01111111" = 127 */ function binaryStrToByte(binaryStr) { if (!binaryStr) { return 0 } var len, re = 0 len = binaryStr.length if (len != 4 ...

2019-05-31 18:23:29 2222

原创 一个基于rxjava2的AndroidBle库-RxAndroidBluetooth

19年4月25日更新前言:一个基于rxjava2的AndroidBLe库github简书目的:保持代码更好的可读性控制代码的复杂度更优雅的处理异步怎么体现?举个栗子?就拿扫描来说,在没有使用rx时它可能是这样的scanner.startScan(filters, settings, scanCallback)callback: override fun onScanRe...

2019-04-29 13:27:13 2597 7

原创 优雅的实现密码可视化

使用了网上搜的修改inputType的方法,但是在小米手机上有问题,小米的安全键盘会在切换时修改type为text,切换体验很差,其他机型没试过,但是发现使用TextInputLayout没有这个问题,遂查看它的源码实现效果如下代码如下: /** * 可视化切换 */ private fun passwordToggle() { //开关 ...

2019-03-18 18:37:53 998

原创 Glide FAQ

view的复用和请求的取消是如何做到的?into()clear()通过这两个方法均可以,into其实也就是调用了clear,通俗的来说,同一个ImageView(包括复用的),如果两个请求,那么后一个会生效,前一个会被取消,在RecyclerView的场景中,图片复用的bug将不会出现,原因是复用的view每次Into时Glide都会帮我们调用clear方法来取消之前的任务(这是通俗的说法...

2019-02-19 10:52:37 125

原创 Glide原理思维导图高速复习版

为什么要用思维导图的形式来总结?2018年末我在包建强的博客上看到一段话,个人比较赞同:少贴代码。多画图,一定要有趣。我对比了一下我之前的学习方式好像真的有问题,在很多情况下我不想去看长篇大论的源码复制,这可能会花费我半天的时间来读一篇博客,或复习并且看完之后通常脑子都是懵逼的…也可以说是看后忘前,看完全忘…而且没办法保持长时间注意力集中但是包哥的方法真的不错,画图在一定程度上简化了大量...

2019-02-13 18:00:32 225

原创 状态模式-优雅的去除if/else

前言:请耐心看完…现在有这么一个需求:app要通过蓝牙给锁发送两条指令A和B,A和B都是我简化的说法,这执行A.B之前是会有其他的前置指令需要执行,比如E-R-A,Y-R-B,那么这两条指令首先都会经过一个R的响应,那么同样的响应如何区分是A指令的响应还是B指令的响应的呢?1.0版本来了…我的做法是通过一个boolean值来区分 伪代码如下:boolean isA;public vo...

2018-12-27 15:31:13 4210

原创 微信小程序ble模块封装成工具类(附源码)

前言:不管你是小程序小白还是ble小白,这个工具类都可以解决你的问题,使用极其简单,改下uuid就可以通信了,下面我简单介绍一下如何调用,不管你是使用我的代码,还是移植到自己的代码中都很简单,源码飞机票 如果帮您解决了燃眉之急请给个star吧…本人在小米,魅族,华为,苹果等机型测试过,都没有问题写在开始,先看下运行效果:再看下工程目录:1.如果你是使用我的Demo,那么需要这些配置就...

2018-11-27 18:22:37 3697 19

opencv图像相似度检测

opencv图像相似度检测

2022-07-01

安卓蓝牙指令测试工具

安卓蓝牙指令测试工具,如何使用看博客https://blog.csdn.net/duo_shine/article/details/72773101

2018-05-09

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除