自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

DeMonnnnnn

I decide what tide to bring. 我的命运,由我做主。

  • 博客(272)
  • 收藏
  • 关注

原创 Android Activity Results API自动化注册&极简使用方案

Activity Results APIActivity Result API提供了用于注册结果、启动结果以及在系统分派结果后对其进行处理的组件。—Google官方文档一句话解释:官方Jetpack组件用于代替startActivityForResult()/onActivityResult()。看完文档会发现,能代替startActivityForResult(),但也并没有好用到哪去。其实startActivityForResult()的调用并不麻烦,复杂页面的使用,做一下简单的封装即可。核

2022-03-04 14:29:22 3796

原创 Android kotlin-gradle-plugin升级到1.7.10引发的编译问题

从1.6.21升级到1.7.10引发了一系列报错

2022-08-30 11:58:45 781 1

原创 Python 通过adb传输文件到手机

Python 通过adb传输文件到手机。1. 手机开启开发者模式2. USB或wifi连接到电脑调试3. 电脑安装了```adb```,并配置了环境变量

2022-08-11 16:03:29 200

原创 Python 复制文件到指定路径

Python 复制文件到指定路径。

2022-08-11 10:36:09 327

原创 Android App线程分析

App线程分析

2022-08-09 18:10:24 378

原创 Python Windows系统模拟键盘鼠标点击事件

Python Windows系统模拟键盘鼠标点击事件。

2022-08-09 17:40:52 158

原创 Windows批量修改文件名bat脚本

@echo offset /p w=请输入文件格式(即扩展名并以回车结束):set /p wf=请输入要修改的文字(以回车结束):set /p cb=请输入要改成的文字(若是删除则直接回车,以回车结束):for /f "delims=" %%i in ('dir /b /a-d "*.%w%"' ) do ( set str1=%%i setlocal EnableDelayedExpansionset "str1=!str1:%wf%=%cb%!"ren "%%i" "!str1!"en

2022-05-16 18:49:26 1297

原创 Android Hlit构建错误:Expected @HiltAndroidApp to have a value.

旧项目中使用Hlit后一直编译报错如下:Expected @HiltAndroidApp to have a value. Did you forget to apply the Gradle Plugin?stackoverflow上有人解决了这个问题:https://stackoverflow.com/questions/62887817/expected-hiltandroidapp-to-have-a-value-did-you-forget-to-apply-the-gradle-plu

2022-04-16 21:09:46 2339

原创 Android 玩转Glide4---缓存篇

前言系列文章专栏: 玩转Glide4概述加载相同的网络资源的时候,为了减少流量开销,优化加载速度,我们一般都会选择使用缓存。Glide作为最优秀的图片加载库,广受大家认可,必然也有着十分优秀的缓存机制。Glide缓存基于LRU原理实现了两种缓存:内存缓存MemoryCache硬盘缓存DiskCacheGlide是默认同时开启这两种缓存的。内存缓存MemoryCache基于LRU的缓存驱逐算法实现。默认开启,也可以调用skipMemoryCache(boolean skip)开启或者

2022-03-23 17:49:33 4240

原创 Android Glide4.x 注: [1] Wrote GeneratedAppGlideModule

问题使用Glide4.x想更换网络组件,引入了官方库okhttp集成库implementation 'com.github.bumptech.glide:okhttp3-integration:4.13.1'然后编译报错如下:> Task :app:kaptDebugKotlin FAILED注: [1] Wrote GeneratedAppGlideModule with: [com.bumptech.glide.integration.okhttp3.OkHttpLibraryGlid

2022-03-23 15:48:39 3249

原创 Android页面关闭时自动隐藏软键盘

问题我们希望页面关闭时自动隐藏软键盘。关闭软键盘的代码很简单:调用InputMethodManager#hideSoftInputFromWindow即可。public boolean hideSoftInputFromWindow(IBinder windowToken, int flags)hideSoftInputFromWindow方法是有返回值boolean类型的。Activity关闭时经历的三个生命周期onPause()---onStop()---onDestory()我们分别deb

2022-02-18 15:14:03 1284

原创 Android ProgressBar传统样式

<ProgressBar style="@android:style/Widget.ProgressBar.Small" android:layout_width="wrap_content" android:layout_height="wrap_content" />

2021-11-11 11:32:33 1278

原创 Python中文报错UnicodeDecodeError

Python脚本运行传值中文的时候,一直报错如下:UnicodeDecodeError: 'utf8' codec can't decode byte 0xc7 in position 0解决win10设置-时间和语言-语言-管理语言设置-更改系统区域设置-勾选bate版使用uft-8提供全球语言支持-重启参考https://ask.csdn.net/questions/724167...

2021-11-02 17:27:29 93

原创 Android Constraintlayout约束失效bug:ArrayLinkedVariables cannot be cast to SolverVariableValues

使用Constraintlayout开发页面时,出现了一个奇怪的bug。具体表现为:页面混乱,约束全部失效。控制台可以捕捉到报错信息如下:java.lang.ClassCastException: androidx.constraintlayout.solver.ArrayLinkedVariables cannot be cast to androidx.constraintlayout.solver.SolverVariableValues百度搜索了一圈,完全没有结果。无奈只能Google。

2021-06-10 17:04:04 352

原创 Android NavigationView头部点击事件无响应

一开始百度都说需要动态inflateHeaderView,然后通过findViewById取设置点击事件。如: View drawerView = navigationView.inflateHeaderView(R.layout.nav_header_main); CircleImageView account = (CircleImageView) drawerView.findViewById(R.id.account); account.setOnClickLis

2021-06-09 18:06:48 141

原创 SQL 根据A表往B表中添加默认数据

例如:有一个user表和message表,要根据user的用户id,在message表中根据每个id生成一条默认数据。SQLite写法INSERT INTO "message" ( "conversation", "msgid", "msgtime", "msgdirection", "isread", "isacked", "isdelivered", "islistened", "status", "msgbody", "msgtype", "bodytype", "se

2021-06-03 17:53:52 77

原创 Android IndexOutOfBoundsException: Inconsistency detected.

UncaughtException detected: java.lang.IndexOutOfBoundsException: Inconsistency detected. Invalid item position 5(offset:5).state:15 androidx.recyclerview.widget.RecyclerView{8623f12 VFE...... .F...... 0,0-1080,1713 #7f0a0c9b app:id/recyclerView}, adapter..

2021-05-31 15:46:46 418

原创 Android获取敏感信息整改---基于Xposed的方法检测

前言前段时间315针对获取敏感的隐私信息(MAC地址)第一次要求整改时,我们使用了如下方案:将已知的友盟SDK放在同意隐私权限后再初始化。使用Hook&反射去拦截可能存在的其他第三方调用。但是整改提交审核20多天后还是被下架了,我们只能认为:Hook&反射去拦截的方案是无效的,检测时只要调用获取MAC的方法就会被认为是违规的。因此我们需要把App首次启动时所有会调用获取MAC的方法,放在同意隐私权限后再初始化。但是App启动时会默认初始化几十个库&第三方服务,我

2021-04-27 09:50:23 3268 3

原创 Android Glide4.x使用视频的第N帧作为封面

Glide4.xGlide4.x提供了frame(@IntRange(from = 0) long frameTimeMicros)方法,可以从提取视频的第N帧作为图片加载。缺点:如果是网络视频链接,第一次加载会非常慢。val options = RequestOptions() .diskCacheStrategy(DiskCacheStrategy.ALL) //获得第1帧图片 这里的第一个参数 以微秒为单位 .frame(1

2021-04-19 17:37:41 798 1

原创 Git:修改最后一次commit

前言使用Git提交代码时,可能会存在如下场景:有时候粗心commit内容写错了,然后想修改最后一次的提交说明。写一个比较大功能的代码,可能写到一半,要切分支,或者怕代码丢失就不得不commit一次。下次再写的时候,同一个功能分多次提交,其他分支cherry-pick什么的,就很麻烦。1. 暂存本次修改如果你修改了代码,想合到最后一次的提交中,第一步你就要暂存本次修改。如果你只是想修改最后一次的提交说明,可以跳过第一步。git add --all2.修改最后一次的提交说明使用--am

2021-04-19 16:37:15 343

原创 Android端FMOD&SoundTouch音频变声解决方案

经过查阅资料知道,目前主流的变声方案有两种:FMODSoundTouchFMODFMOD是一个强大的声音引擎框架,QQ、魔兽世界及其他很多游戏都是使用的这套框架,框架内包含几十种声音类型,还可以修改声音的频率、速度等等。1.进入FMOD download,下载Android端引擎库。2.将下载下来的FOMD引擎库中的Jar包,so库和jni c++文件,复制到项目中。3.编辑配置CMakeLists.txt-------------------------------------

2021-02-03 10:05:21 2199 10

原创 Android 新版v2签名&渠道包工具

Apk签名工具Android7.0引入了全新的APK Signature Scheme v2签名方式,使用传统的JDK jarsigner命令行签名只能进行v1签名,如果要进行v2签名就要使用SDK提供的apksigner工具。apksigner.jar在版本>25的SDK\build-tools\中。基于此,使用JavaFx编写了安卓Apk签名工具,方便快速进行v1&v2签名。无需记忆复杂的命令行,点击几下即可方便快速的签名。使用xml格式配置签名密钥,可以配置多个签名密钥。开

2021-01-16 18:54:12 3944

原创 AndroidQ的文件操作解决方案

QFsolution适用于AndroidQ的简易图片选择器。基于协程的系统文件选择,系统拍照,系统裁剪。Uri转为File的究极解决方案。开始使用添加依赖allprojects { repositories { maven { url "https://jitpack.io" } }}dependencies { implementation 'com.github.iDeMonnnnnn:QFsolution:1.0.2'}添加权限 &

2020-11-05 18:22:23 958

原创 Android:So库适配简单总结

前言日常开发我们经常会使用到第三库,涉及到底层的语音,视频等都需要添加so库。而so库的体积一般来说非常的大,不搞清楚随意添加会导致apk体积暴增。本文只做一个简单的学习总结。强烈建议阅读文章:为何大厂APP如微信、支付宝等只适配了armeabi-v7a/armeabi?CPU架构Android目前支持以下7种ABIs(Application Binary Interface的缩写,即应用二进制接口):mips, mips64, X86, X86–64, arm64-v8a, armeabi,

2020-08-21 16:28:44 1749

原创 Flutter:输入框焦点获取与软键盘隐藏

问题如上动图,我们在登录界面存在两个问题:输入用户名时,我们点击下一步,焦点并不会自动跳到密码输入框。点击登录弹出Dialog后,输入框会自动重新获得焦点,我们想点击登录按钮后隐藏软键盘且不再弹出。解决输入框中有个focusNode属性,用于控制输入框是否占有当前键盘的输入焦点。FocusScope.of(context).requestFocus(focusNode);可以指定focusNode属性的输入框获取焦点。实例化一个空白焦点blankNode,然后不赋值给任何输入框的foc

2020-07-27 16:10:29 4575

原创 Kotlin:函数DSL实战

DSL(domain specific language),即领域专用语言:专门解决某一特定问题的计算机语言,比如大家耳熟能详的 SQL 和正则表达式。Kotlin DSL的简单定义:“使用 Kotlin 语言开发的,解决特定领域问题,具备独特代码结构的API 。”扩展函数/属性假设我们想获取昨天的日期,昨天相对于今天来说也就是一天前,那么获取这个方法的DSL写法就应该是: val yesterday = 1.days.ago 由上面的结构,我们可以设计扩展函数如下:fun Int.day.

2020-07-23 20:12:03 295

原创 Kotlin:属性委托笔记&实战

委托模式委托模式是软件设计模式中的一项基本技巧。在委托模式中,有两个对象参与处理同一个请求,接受请求的对象将请求委托给另一个对象来处理。Kotlin直接支持委托模式,更加优雅,简洁。Kotlin通过关键字by实现委托。属性委托属性委托指的是一个类的某个属性值不是在类中直接进行定义,而是将其托付给一个代理类,从而实现对该类的属性统一管理。属性委托语法格式:val/var <属性名>: <类型> by <委托代理类>属性委托要求对于只读属性(也就

2020-07-22 20:43:04 417

原创 DioError [DioErrorType.DEFAULT]: Bad state: Can‘t finalize a finalized MultipartFile

class DioPostPage extends StatefulWidget { @override createState() => new DioPostPageState();}FormData formData = new FormData.fromMap({'username': 'DeMon', 'password': 'lh1995623'});class DioPostPageState extends State<DioPostPage> { va

2020-07-07 10:11:08 2567

原创 Android一键打包,上传,提交修改记录的黑科技

前言在Gradle中配置好签名文件相关信息,就可以实现一键打包,还可以自定义输出路径,修改Apk名称等,减少我们提测时的繁琐步骤。详情请看:Gradle实现一键签名打包即使我们配置好了Gradle,我们开发提测时仍需要进行如下三个步骤:修改版本号,重新编译,打包成新的Apk复制粘贴Apk,QQ、钉钉等发送给测试写几条修改记录,好让测试知道改了什么平时偶尔打包倒是没什么,但是到了测试周,测试问题一个接着一个,连续打包很多次的时候就会觉得特别烦。遇到网络不好传输文件慢的时候还特抓狂,更不要说

2020-06-08 18:36:39 675 1

原创 RecyclerView中RadioGroup动态添加RadioButton,在setOnCheckedChangeListener报空异常的问题

报错信息如下:group.findViewById<RadioButton>(checkedId) must not be null问题分析RecyclerView中ViewGroup动态添加子View,为了防止位置错乱的发生我们一般都要removeAllViews()。RadioGroup再次显示出来时会由于RecyclerView的复用机制会触发setOnCheckedChangeListener,但是由于我们removeAllViews()移除了所有的子组件,新的RadioButt

2020-05-28 14:19:09 1034

原创 Android Gradle实现一键签名打包

手动打包签名Build—>Generate Singned Bundle or APK—>APK Next选择你的密钥,填入key和两个密码,Next选择Build Variants,签名版本(V1必选,V2可选),FinishAS就会开始帮我们打包,打包成功后,右下角会有提示:APK(s) generated successfully for module ...

2020-04-23 16:01:15 2728 1

原创 Android Okhttp上传文件报错:Unexpected char 0x677e at 35 in Content-Disposition value

Okhttp请求头不支持中文,间接导致中文命名的文件上传会报错。java.lang.IllegalArgumentException: Unexpected char 0x677e at 35 in Content-Disposition value: form-data; name="file"; filename= "松果测试.docx"at okhttp3.Headers.checkVa...

2020-04-22 16:28:31 2907

原创 Android 玩转Glide4---Transformation篇

前言系列文章专栏: 玩转Glide4基础使用篇:Android 玩转Glide4—基础使用篇进阶使用篇:Android 玩转Glide4—进阶使用篇概述再基础篇和进阶篇中,我们简单介绍了Glide4的用法,和一些进阶的使用。本篇Transformation转换篇,将给大家介绍Glide4强大的转换功能。Glide自带的转换效果 <ImageView a...

2020-04-21 17:20:52 3572 1

原创 Android 玩转Glide4---进阶篇

前言系列文章专栏: 玩转Glide4基础使用篇:Android 玩转Glide4—基础使用篇概述基础使用篇中我们简单介绍了Glide4的使用,以及相对于Glide3的变化。本篇进阶篇,将会介绍预加载,生命周期,加载监听,下载图片等方面的内容。预加载—preload()Glide加载图片会自动判断图片是否在缓存中,以此来决定直接读取缓存还是直接下载。但是如果我希望提前对图片进行一个预...

2020-04-20 16:40:50 3223

原创 Android 玩转Glide4---基础篇

概述Glide是一款由Bump Technologies开发的快速高效的Android图片加载库,使得我们可以在Android平台上以极度简单的方式加载和展示图片。注重于平滑的滚动。Glide提供了易用的API,高性能、可扩展的图片解码管道(decode pipeline),以及自动的资源池技术。Glide4相对与Glide3最大的改动就是将一系列API移动到了RequestOption...

2020-04-20 14:05:53 1058

原创 Android RecyclerView多样式列表实践指南

前言在日常的开发中我们经常会在一个列表数据中展示多种样式。比如一个新闻列表,顶部是一个焦点Banner,然后是展示文章列表,文章中间可能插入某个图片广告,底部是一个加载更多/没有更多数据的加载状态视图。自定义ViewType实现熟悉RecyclerView的都知道,我们可以通过设置列表每个位置对应的viewType来加载指定的View,这也是所有多类型列表框架的基本实现原理。适用于数据...

2020-04-14 14:04:36 2948

原创 Android8.0通知栏适配全面解析

参考Android通知栏微技巧,8.0系统中通知栏的适配渠道8.0系统后使用通知栏需要先创建渠道,多渠道可以设置渠道组进行管理。如果你项目的targetSdkVersion>=26,如果没有进行渠道适配,将完全无法弹出通知栏。如果targetSdkVersion>=26,且升级了Android核心库,那么原来的通知栏构造方法会显示为废弃方法,需要多传一个渠道Id,如果该渠道...

2020-02-12 21:44:09 2532 2

原创 Android实现一个可折叠的TextView

前言下左是UI给的效果图,最初准备用Manabu-GT/ExpandableTextView去实现,但是实际效果跟UI略有出入:折叠后的最后一行没有省略号。折叠箭头在文本最下面,而不是在最后一行的最右边。为了解决这个问题,就只能自己动手撸一个。效果图话不多说,上效果图。跟UI设计图 基本完全一致。实现思路首先需要计算文本在TextView完全显示的最大行数。然后需要获取...

2020-01-21 11:27:47 1122

原创 Android Retrofit2.0 网络请求固定入参

前言Android开发中进行网络请求时,我们很多时候会有有一些固定入参。比如:写在请求头的token令牌。一些第三方平台接口,请求时要求必须携带的平台key。这些固定入参每次请求都写在请求方法中的话,势必会非常的烦,如果能统一封装一下岂不美哉?在Retrofit2.0中我们可以通过Interceptor拦截器实现,然后在Okhttp3使用Builder添加Interceptor。示...

2019-12-10 11:16:45 485

原创 Kotlin:作用域函数(let、with、run、apply、also)

作用域函数Kotlin 标准库包含几个函数,它们的唯一目的是在对象的上下文中执行代码块。当对一个对象调用这样的函数并提供一个 lambda 表达式时,它会形成一个临时作用域。在此作用域中,可以访问该对象而无需其名称。这些函数称为作用域函数。共有以下五种:let、run、with、apply 以及 also。letlet 可用于在调用链的结果上调用一个或多个函数。let 经常用于仅使用非空...

2019-11-21 11:01:27 608

空空如也

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

TA关注的人

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