
Android
文章平均质量分 57
duo_shine
这个作者很懒,什么都没留下…
展开
-
蓝牙作为服务端广播,扫描不到或名称显示不全的问题原因
ble作为服务端广播原创 2023-04-04 17:32:25 · 942 阅读 · 0 评论 -
opencv 图像相似度对比
opencv 图像相似度对比原创 2022-07-01 23:32:40 · 2264 阅读 · 0 评论 -
集成腾讯TBS问题记录
周末好!前言:集成腾讯TBS遇到的问题记录,网上教程比较老了,大家不能照抄。比如,为了支持64位手机,添加.so的步骤,但在新版本,这个问题都已经被修复,我们只需要去官网下载最新的jar包或者通过依赖的方式就可以了下面的问题都是通过TbsReaderView显示文件遇到的问题。都解决了,但是QbSdk.openFileReader的方法我也试了一直处于加载文档,我就没研究了、x5内核加载时 onViewInitFinished回调一直返回false可能是第一次加载时正在下载内核时应用退出了,下次不.原创 2021-12-18 10:36:09 · 4317 阅读 · 0 评论 -
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 · 659 阅读 · 0 评论 -
CameraX 三:获取预览流
前言话接上文,本篇将要学习如何获取预览流,有了预览流我们可以做很多场景,如人形、人脸、车牌识别,如推流到流媒体服务器等等。如果感到不适,强烈建议从CameraX 一看过来源码机票布局文件 <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal">原创 2021-07-08 21:45:22 · 3016 阅读 · 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 · 1131 阅读 · 1 评论 -
CameraX 一:拍照、预览
什么是CameraX?CameraX是一个基于camera2的加强库,具有生命周期感知能力,有很多的自感知能力,比如我们不需要处理拍照旋转,它向后兼容至21.有没有必要升级到CameraX?现在,你只需要两行代码就能实现与预安装的相机相同的体验和功能(what)有生命周期感知能力更简单的使用方式自动解决设备的兼容性问题,减少代码量,比如自动确定可使用的最佳分辨率。包括其他宽高比、屏幕方向、旋转角度、预览大小,这些都交给CameraX反正有意思的东西我就必须要学。。我的计划大概是分为基础预原创 2021-07-06 21:10:13 · 1633 阅读 · 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 · 6081 阅读 · 6 评论 -
仿抖音APP
所有资源及视频均来自抖音APP,代码用以学习目的,如有任何侵权请私信我删除。阉割了无数功能。大概实现了如下效果:录制的像素比较差,没注意上面竟然还留了黑边。。。下面是必读:登录的功能依赖于环信SDK,如果你要下载代码使用,可以将launcher页换为Main,或者你去环信官网申请个应用,免费的,填入key在代码中就可以使用了,没有环信key聊天功能无法使用哦,拍摄视频依赖于美摄SDK,免费版好像就是这么模糊,不知道收费会不会好一些,用过其他的但是注册用户太麻烦。所有滤镜及ui均出自美摄原创 2020-11-21 16:11:15 · 3279 阅读 · 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 · 433 阅读 · 0 评论 -
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 · 1281 阅读 · 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 · 1055 阅读 · 0 评论 -
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 · 991 阅读 · 0 评论 -
viewmodel:一个简单的例子
介绍ViewModel 类旨在以注重生命周期的方式存储和管理界面相关的数据。ViewModel 类让数据可在发生屏幕旋转等配置更改后继续存在(出自官方文档)。举个例子,如果系统销毁或重新创建界面控制器,则存储在其中的任何临时性界面相关数据都会丢失。例如,应用的某个 Activity 中可能包含用户列表。因配置更改而重新创建 Activity 后,新 Activity 必须重新提取用户列表。对于简...原创 2020-04-12 20:11:38 · 1093 阅读 · 0 评论 -
一个基于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 · 2795 阅读 · 7 评论 -
优雅的实现密码可视化
使用了网上搜的修改inputType的方法,但是在小米手机上有问题,小米的安全键盘会在切换时修改type为text,切换体验很差,其他机型没试过,但是发现使用TextInputLayout没有这个问题,遂查看它的源码实现效果如下代码如下: /** * 可视化切换 */ private fun passwordToggle() { //开关 ...原创 2019-03-18 18:37:53 · 1112 阅读 · 0 评论 -
sql查询语句
简单查询,多表关联查询,区分时间查询原创 2017-03-16 15:05:41 · 389 阅读 · 0 评论 -
SQLite持久化存储
回忆一下Android的SQLite持久化存储,有一段时间没用了,又或是使用的第三方封装的,顺手写了个小记事本,回忆一下温故而知新嘛。。最后给下载地址 效果: 可以自定义首页的item,点击最后一个添加的item就ok,名字也是自定义的,github地址:https://github.com/duoshine/notepad原创 2017-05-22 18:43:37 · 632 阅读 · 0 评论 -
高德地图定位与导航
先看下效果图:最后有demo下载地址 定位使用的是高德地图,根据你自己的需求可以更换,选择导航可以支持百度地图和高德地图,但是注意高德地图和百度地图使用的坐标标准不同,高德地图的定位使用百度地图导航是有偏差的,需要转换,我在公司项目时也遇到一个没解决的问题,demo中直接定位导航偏差很小,但是上传到服务器之后,再获取到的经纬度导航就有大概一公里的偏差,查了一些资料也可以解决。将高德的GCJ-0原创 2017-04-05 16:51:15 · 1610 阅读 · 2 评论 -
SDKjar从打包到混淆
因为需要给客户提供特定功能的SDK,但是又不想让自己的代码暴露给别人,所以打包后的jar包还是有必要做下混淆工作的,都是亲测有用的一.打包首先说打包,在开发中需要测试所以可能在项目中写或者通过依赖库的形式写的,我是通过库的形式,在打包上as已经提供了打包好的jar包存放在build/intermediates/bundles/debug或者release下classes.jar,或者自己通过grad原创 2017-10-30 18:10:53 · 620 阅读 · 0 评论 -
ksoap2使用
ksoap2的菜鸟教程原创 2017-03-16 14:19:41 · 1118 阅读 · 0 评论 -
为Snackbar添加两个action事件
需求一个action解决不了,所以扩展了一下,源码在最后,效果:这个是两个button,源码在github,如果需求是其他的比如还需要加上img等,都是一个思路就可以解决这个是系统原生的snackbar的布局文件,使用了他的style<merge xmlns:android="http://schemas.android.com/apk/res/android"><TextV...原创 2018-02-28 17:41:56 · 916 阅读 · 0 评论 -
downloadmanager (兼容Android7.0和8.0)
前言:如何通过DownLoadManager实现下载apk并通过广播确认下载完毕进行安装 就不提供代码了,这些代码网上有很多,这里贴上出几个自己遇到的问题和解决方法 如下代码在5.0的系统上没有问题,跳转到提示安装界面 DownloadManager dManager=(DownloadManager)context.getSystemService(Context.DOWNLOAD...原创 2018-04-02 17:35:17 · 2745 阅读 · 0 评论 -
Android EventBus3.1.1从使用到源码解析
前言:EventBus相信或多或少都使用过,他可以简化组件间的通信,发布和订阅事件总线很好的分离了发布者和接收者(订阅者),发布和订阅者之间没有联系他们通过Eventbus来通信,下面看下如何使用,用过的可以直接忽略去看源码分析本篇文章基于:compile 'org.greenrobot:eventbus:3.1.1'github:https://github.com/...原创 2018-05-18 10:44:22 · 4554 阅读 · 1 评论 -
rxjava+retrofit一次完整的网络请求过程(源码解析)
前言:从retrofit实例构建到onCompleted(),一次完整的请求过程解析compile 'com.squareup.retrofit2:adapter-rxjava:2.0.2'ompile 'com.squareup.retrofit2:retrofit:2.0.2'这是正常的一次请求用到的代码,都很熟悉了,但在这个过程中retrofit和rxjava究竟做了什...原创 2018-04-29 22:38:32 · 593 阅读 · 0 评论 -
AsyncTask从使用到源码解析(Android-26/22)
AsyncTask相信或多或少都使用过,其封装了线程池和handler,更优雅的处理了异步任务的交互,用起来也极为简单简单使用:private class MyAsyncTask extends AsyncTask&amp;amp;amp;amp;amp;lt;Void, Integer, Void&amp;amp;amp;amp;amp;gt; { @Override protected void onPreExecute() {原创 2018-06-07 17:32:10 · 187 阅读 · 1 评论 -
Android线程池剖析(ThreadPoolExecutor/Executors)
不管是在工作中还是面试中.掌握线程池对我们的帮助都非常大 使用线程池的好处:减少了每个任务的调用开销,当有大量异步任务时能提高性能,更容易管理线程,比如已完成任务的数量 使用线程池的坏处:暂时没发现ThreadPoolExecutor: 线程池的实现类,通过ThreadPoolExecutor的构造器参数我们可以定义很灵活且适合应用场景的线程池Executors: 线程池工具类,比...原创 2018-09-04 17:03:15 · 561 阅读 · 0 评论 -
Glide FAQ
view的复用和请求的取消是如何做到的?into()clear()通过这两个方法均可以,into其实也就是调用了clear,通俗的来说,同一个ImageView(包括复用的),如果两个请求,那么后一个会生效,前一个会被取消,在RecyclerView的场景中,图片复用的bug将不会出现,原因是复用的view每次Into时Glide都会帮我们调用clear方法来取消之前的任务(这是通俗的说法...原创 2019-02-19 10:52:37 · 154 阅读 · 0 评论 -
Glide原理思维导图高速复习版
为什么要用思维导图的形式来总结?2018年末我在包建强的博客上看到一段话,个人比较赞同:少贴代码。多画图,一定要有趣。我对比了一下我之前的学习方式好像真的有问题,在很多情况下我不想去看长篇大论的源码复制,这可能会花费我半天的时间来读一篇博客,或复习并且看完之后通常脑子都是懵逼的…也可以说是看后忘前,看完全忘…而且没办法保持长时间注意力集中但是包哥的方法真的不错,画图在一定程度上简化了大量...原创 2019-02-13 18:00:32 · 264 阅读 · 0 评论 -
打开TabLayout的正确姿势
TabLayout的使用,源码介绍,以及如何区分TabLayout的title英文大小写问题原创 2017-01-12 11:23:25 · 1020 阅读 · 1 评论