- 博客(50)
- 资源 (4)
- 问答 (2)
- 收藏
- 关注
原创 如何在 Android 中录制屏幕内容,并以H.264数据流形式发送(屏幕广播)
不同于普通的动态权限申请,屏幕录制的权限在每次使用 App 时都需要重新申请一次。在 回调中保存 与 ,这两个参数将会在后续用于实例化 对象2. 创建 MediaCodec 编码器3. 创建虚拟显示器 VirtualDisplay其中参数有如下几种:一般来说用 VIRTUAL_DISPLAY_FLAG_PUBLIC 即可。大致流程如下:Demo代码仓库地址: junerver/TestCaptureAndRecord...
2022-07-01 11:19:13 1467
原创 使用 Docker 搭建 Maven 私服,并通过 maven-publish 上传 aar 到 Maven 私服
1 Maven 与 Maven 私服对于 Maven 大家应该都还不算太陌生,虽然作为 Android 开发我们都是用 gradle 来进行项目构建、依赖管理等工作,但是我们还是离不开 Maven 的中心仓库 Maven Central ,例如在我们的根 build.gradle 文件中就可以看到这样的代码:buildscript { repositories { google() mavenCentral() } dependencies {
2022-03-09 10:43:55 1100
原创 Android 仿微信录制短视频(不使用 FFmpeg)
转载请标明出处与作者:https://www.jianshu.com/p/2cb7b0110fde项目中原本就有录制短视频的功能,使用的是 # qdrzwd/VideoRecorder 这个项目,但是该项目不支持 targetSdkVersion 22以上的版本,而现在各大市场都要求 targetSdkVersion 必须要26以上了,所以急需找到替代的方案。分析解决方法大致上有如下三种......
2018-11-02 14:30:04 11885 21
原创 通过百度地图实现仿美团外卖的地图选点确定收货地址
转载请标明出处:https://www.jianshu.com/p/29b60ca83be2 吐槽自己:好长的标题啊这个功能想必大家都很熟悉,但是网上搜索到的几篇文章要么是大段的代码看的头晕,要么是不求甚解的复制粘贴,今天我们从布局到实现原理一步步分析,让你也能完成一个仿美团外卖的地址选择页面。页面布局首先我们从美团外卖的页面布局开始分析,如下图所示:可以看出......
2018-05-19 11:12:03 19709 2
原创 Gradle —— 使用 Gradle 打包多个变体(variant)
转载请标明原文地址:http://www.jianshu.com/p/843055bf6edd 刚开始使用 CSDN 博客,故将原来写在简书的文章迁移到 CSDN 的博客,并重新进行排版。 背景:刚刚接手的项目中包含 3 个客户端 App(两个 Eclipse 工程、一个 AS 工程),同时这个项目根据不同用户的制定还有两个衍生版本。原来的开发人员将项目复制后修改,在我接手时一共存在着9个工
2017-03-22 14:38:46 1573
原创 使用 ahooks 中的 useRequest 轻松管理React中的网络请求
除了上面我们提到的,用于配置手动执行请求之外,options还有很多可选的配置,接下来我们简单介绍几个常用的配置。行文至此,想必你应经对如何使用useRequest有了一定的了解,在后续文章中,我会继续介绍useRequest中的其他高级用法,例如 swr 缓存、请求的防抖、节流,还有上面我们说的乐观更新等等。PS:再本文中,大写的 SW R特指的由 Next.js 团队推出的SWR库,小写的 swr 则指的是这一概念,请注意区分。
2022-09-14 10:41:43 6741 1
原创 React-router-dom 6关键点总结 & 路由鉴权的简单思路
快速入门 React-router-dom v6Params 传参,需要在路由声明接受参数 类似于restful,state传参V6的注意点移除了标签,使用标签替代引入了useRoutes([])用于根据路由表创建根路由,其返回值是dom,用{}包裹,放置于节点下即可配置全部一级路由路由表的创建模式子组件不需要再使用钩子创建路由,路由框架通过识别子组件的 以及路由表的children关系,可以知道往什么地方渲染子组件,这一点非常方便标签取消了 ,cla......
2022-06-27 17:17:48 1334
原创 从零开始学习React:react中事件处理与柯里化
从零开始学习React:了解当前React常用技术,编写第一个React组件从零开始学习React:了解组件的三大属性从零开始学习React:react中事件处理与柯里化1. 事件处理React 中元素也可接受、处理事件,但是在语法上有一点不同。在React 中所有事件的命名采用的是小驼峰,而非原生 DOM 的纯小写,所有事件需要我们传入一个函数,而非字符串。例如:const Button = () => { const handleClick = () => {
2022-05-23 15:33:27 370
原创 从零开始学习React:了解组件的三大属性
从零开始学习React:了解当前React常用技术,编写第一个React组件从零开始学习React:了解组件的三大属性上一节我们简单介绍了React的相关技术栈,以及如何在一个 html 文件中使用 React,创建一个React 组件并渲染到Html 中。本节我们来介绍在 React 中 一个组件比较重要的三大属性组件三大属性就如我们上一节中介绍的一个最简单的函数式组件是这样的:const H2 = ({ title }) => <h2>{title}</h2>
2022-05-22 16:29:01 467
原创 从零开始学习React:了解当前React常用技术,编写第一个React组件
React 与 Vue 可以说是现阶段最热门的前端UI框架了,最近开始学习 React,准备开一个新坑:从零开始学习React,主要是学习时的一些思考与记录,如有谬误,烦请斧正。由于前端技术的快速迭代,我会在适当位置标注版本信息,以免出现货不对板。1. 了解当前 React 常用技术栈2. 上手实操,编写第一个组件3. 组件三大属性3.1 state3.2 props3.3 refs...
2022-05-21 15:25:47 604
原创 在 Kotlin 中巧妙的使用 DSL 封装 SpannableStringBuilder
上一篇文章我们介绍了如何在 kotlin 优雅的封装匿名内部类(DSL、高阶函数),其中我还算详细的介绍了在 Kotlin 中如何使用 DSL,本文可以看作是对上一篇文章中 DSL 的一个实战。源从何来在 Android 开发中 Spannable 实现富文本显示,也算是一个比较常见的使用场景,例如在登录页显示《隐私政策》、《服务协议》,通常这是一个有自定义颜色与点击事件的 Span,使用起来大致需要写如下代码:private fun agreePrivate() { val tv .
2022-02-21 18:07:05 2152
原创 如何在 kotlin 优雅的封装匿名内部类(DSL、高阶函数)
匿名内部类在 Java 中是经常用到的一个特性,例如在 Android 开发中的各种 Listener,使用时也很简单,比如://lambdabutton.setOnClickListener(v -> { //do some thing});//匿名内部类button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { //do
2022-02-18 15:57:42 1308
原创 Compose学习笔记2 - LaunchedEffect、状态与 状态管理
在 Compose 中使用协程Kotlin 中协程有多好用,想必不用我多说了。方便的构建、简洁的切换协程语法、await函数与join函数,尤其是在 lifecycle 扩展出现之后,在 Activity 与 Fragment 中可以通过类似 lifecycleScope.launch { } 这样的语法更方便的使用协程。之前我们介绍过,Compose 是 FP 风格的,UI是通过一个个Composable函数组合在一起形成的,自然不能用lifecycleScope.launch { },那么在 Com
2022-02-15 13:43:38 3354
原创 Compose学习笔记1-compose、state、flow、remember
新建一个 compose 项目开始前,请下载最新版本的 Android Studio Arctic Fox,然后使用 Empty Compose Activity 模板创建应用。我们先看看在 app/build.gradle 中是如何配置使用 compose 的。android{ buildFeatures { // viewbinding 之类的功能也需要在此开启 compose true } composeOptions {
2022-02-12 10:48:31 3735
原创 Android Gradle打包常用函数记录
日期函数:def releaseTime() { return new Date().format("yyyyMMddHHmm", TimeZone.getTimeZone("Asia/Shanghai"))}MD5函数:import java.security.MessageDigestdef generateMD5(String path) { MessageDigest digest = MessageDigest.getInstance("MD5") FileIn
2022-01-28 11:20:28 418
原创 用python编写可以快速在 Android 多变体项目中创建 sourceSet 的脚本
本文普适性比较低,仅限于需要在项目里使用多个变体(variant)的开发者。对于gradle打包多变体可以参考我之前写的文章Gradle —— 使用 Gradle 打包多个变体(variant)太长不看:项目地址:junerver/flavor_cli叨叨叨在多变体项目中有一个工作是比较麻烦而且折磨人的,那就是给不同的变体添加自己的 sourceSet。每当我们需要将一个 Java 文件,通过变体来实现差异化时,都需要将该文件从 main 中拷贝,移动到所有变体各自的 sourceSet 中.
2021-10-12 10:34:39 199
原创 Kotlin Koans 学习笔记 —— Unit 5
Kotlin Koans 学习笔记 —— Unit 1Kotlin Koans 学习笔记 —— Unit 2Kotlin Koans 学习笔记 —— Unit 3Kotlin Koans 学习笔记 —— Unit 436 扩展函数fun task36(): List<Boolean> { fun Int.isEven():Boolean {return this%2 ==0 } //偶数 val isOdd: Int.() -> Boolean = { this%
2021-09-23 09:56:09 242 1
原创 Flutter 学习日记1
本文用于记录我在项目中集成 Flutter 遇到的种种问题,作者纯 Flutter 小白,所以可能会有大量错误,请大佬指出。1 在原生项目中显示 Flutter 项目我的原生项目是 Android ,使用 AS 开发,使用官网介绍的源码集成方式集成Flutter 模块,在原项目中的 settings.gradle 添加如下代码:setBinding(new Binding([gradle: this]))evaluate(new File( settingsDir.parentFil
2021-04-20 12:54:59 230
原创 原生Android项目集成Flutter Module踩坑记录
按照官网的手动集成步骤一步一步完成,但是在运行打开 FlutterActivity 时出现了了如下错误:E/flutter: [ERROR:flutter/runtime/dart_vm_data.cc(18)] VM snapshot invalid and could not be inferred from settings.E/flutter: [ERROR:flutter/runtime/dart_vm.cc(250)] Could not setup VM data to bootstrap
2021-01-22 12:03:10 1901 3
原创 更优雅的使用回调函数 —— Kotlin 协程
简断截说,上代码!举例:fun login(name:String,pass:String){ HttpMethods.webService.login(name,pass){ override fun onSuccess(bean: LoginBean) { connect(bean.token) } override fun onError(e: Exception) { } }fun connect(token:String){ ......//调用方法,从
2021-01-06 14:23:13 1647
原创 记一次更新Retrofit版本后发起网络请求程序崩溃
错误日志如下:java.lang.NoSuchMethodError: No static method metafactory(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodType;)Ljava/lang/in
2020-12-18 16:46:32 668 1
原创 DatePickerDialog 仅显示年月
DatePickerDialog 是我们常用系统自带的日期选择对话框,但有时我们仅需要选择 年月 或者仅需要选择 月日,这种情况我们应该如何快速实现该功能呢?直接百度搜索给出的帖子里最接近正确答案的是这篇文章:【Android DatePickerDialog只显示年月或只显示月日】你直接照搬,但是你如果直接照搬,大概率是没有效果,原因在于Dialog的格式!这些文章大部分都写的很早,在19...
2019-11-25 09:45:18 1089 1
原创 Kolin协程与Retrofit 2.6.1完美合璧
协程有多么好用相比我们不需要再多赘述了,协程如何搭配旧版本的 Retrofit 使用相比大家也在网上看到过很多文章,大致如下://扩展 await() 函数 private suspend fun <T> Call<T>.await(): T { return suspendCancellableCoroutine { continuation -...
2019-08-12 15:07:49 3113 2
原创 Kotlin协程 —— 今天说说 launch 与 async
上文我们已经知道了,在没有CoroutineScope时,我们可以通过实现该接口,或者使用 runBlocking 方法,来使我们的程序可以调用 suspend 挂起函数。今天我们来看看 Builders.common 下的几个构建协程函数:launch 与 async 函数launch 函数在上一篇文章中我们已经接触过数次 launch 函数了,他的主要作用就是在当前协程作用域中创建一个新...
2019-08-09 10:38:01 14940 2
原创 Kotlin协程 ——从 runBlocking 与 coroutineScope 说起
关于协程我们不多阐述,详细内容请查看官方文档,本文只谈谈 runBlocking与 coroutineScope。runBlocking我们先来看看 runBlocking 文档是如何描述该函数的:Runs a new coroutine and blocks the current thread interruptibly until its completion. This funct...
2019-08-07 15:10:14 20503 2
原创 JetPack 初见 - 使用 LiveData 实现组件之间数据共享
18年谷歌退出了新的开发套件 JetPack (喷气背包),本文将浅显的讨论一下其中 LiveData 的一些使用方法与注意事项。1. LiveData 是什么?LiveData 是一个可观察的数据持有者类。与常规observable不同,LiveData是生命周期感知的,这意味着它关注其他应用程序组件的生命周期,例如 Activity,Fragment 或 Service。这确保了 Liv...
2019-07-25 11:11:59 3083
原创 Android 9.0适配
在 res/xml 文件夹下新建一个 xml 文件 network_security_config.xml,内容如下:<?xml version="1.0" encoding="utf-8"?><network-security-config> <base-config cleartextTrafficPermitted="true" />&l...
2019-07-15 10:32:08 711
原创 百度鹰眼SDK文档勘误 —— 查询实时位置
SDK 版本: 3.1.0sdk文档:http://lbsyun.baidu.com/index.php?title=android-yingyan/guide/searchtrack查询实时位置查询一或多个被追踪者的实时位置。//鹰眼服务IDlong serviceId = <开发者创建的鹰眼服务的ID>;//entity标识列表(多个entityName,以英文逗号...
2019-07-02 10:43:22 2073
原创 自适应的TextView —— AppCompatTextView
没什么好说的,对CSDN上的一些文章进行勘误。如果你的 minSdkVersion ≥ 26 那么TextView 已经自带该项支持,只需要添加在 xml 文件中添加android:autoSizeTextType="uniform" 即可!如果你的minSdkVersion 小于 26,那么就需要使用 v7 支持包中的 android.support.v7.widget.AppCompatT...
2019-05-21 16:49:26 1077
原创 Android Studio打开项目后所有文件爆红的解决方法
打开一个半年前的项目,发现所有类文件爆红尝试了删除 .gradle build 文件夹,无效。解决方法:File -> Invalidate Caches/Restart问题解决,特此记录!
2019-04-19 11:44:04 3753 1
原创 Kotlin Koans 学习笔记 —— Unit 4
Kotlin Koans 学习笔记 —— Unit 1Kotlin Koans 学习笔记 —— Unit 2Kotlin Koans 学习笔记 —— Unit 3
2019-01-17 09:30:19 247
原创 Kotlin Koans 学习笔记 —— Unit 3
Kotlin Koans 学习笔记 —— Unit 1Kotlin Koans 学习笔记 —— Unit 225 Comparison修改 MyDate.kt 实现 Comparable 接口data class MyDate(val year: Int, val month: Int, val dayOfMonth: Int) :Comparable&amp;lt;MyDate&amp;gt;{ ...
2019-01-07 09:10:38 233
原创 Kotlin Koans 学习笔记 —— Unit 2
Kotlin Koans 学习笔记 —— Unit 1Kotlin Koans第二单元讲的主要是集合在Kotlin中的各种高级操作。13 介绍fun Shop.getSetOfCustomers(): Set&lt;Customer&gt; { // Return a set containing all the customers of this shop return t...
2019-01-02 11:40:35 277
原创 Kotlin Koans 学习笔记 —— Unit 1
最近在学习 Kotlin 将官方出的练习题做了一遍,将答案以及做题的时候的一些思考记录于此:开始执行:git clone git@github.com:Kotlin/kotlin-koans.git,使用 Idea 打开项目。1 转换Java代码fun task1(collection: Collection<Int>): String { val sb = Strin...
2019-01-02 09:01:51 316
原创 Android Studio 项目 Gradle 升级经验总结
想必各位小伙伴早就都有收到各大应用市场下发的关于《软件高 API 公告》吧!升级我们项目的 API 版本等级已经是必须提上日程了,同时 AS 版本等级、Gradle 版本也是我们升级绕不开的一环,总不能 API 等级提高了,项目还基于低版本的 Gradle 吧。下文我们将简单讲讲,在升级 Gradle 版本时需要注意的一些问题,以及出现相关问题时的解决方法,愿各位小伙伴都愉快的升级。环境为:...
2018-12-29 09:59:34 5058
原创 Jenkins 踩坑记录
Jenkins的安装步骤我就不赘述了,有很多文章可以供参考,本文只讲在安装使用过程中遇到的一些问题及解决的方法。1. 安装博主用于部署 Jenkins 的设备是一台 Debian8 主机,使用 ssh 连接。一开始我按照官方指南来进行安装,但是在执行 sudo apt-get install jenkins 提示找不到这个安装包,后来发现是软件源的问题,官方指南上使用的是 https ,改...
2018-12-29 09:44:47 2612
原创 AndroidThings——连接 SHT20 传感器读取温湿度
序一些介绍AndroidThings(之后将简称ATs)的一些文章:Android Things是什么Android Things系统刷写Android Things树莓派开发板没有显示器时如何连接Android Things的日期和时间设置这几篇文章都是同一个作者书写,都是非常有帮助的入门文章,下面我就不多废话了,进入咱们的主题:ATs(树莓派) 连接 SHT20 传感器读取温湿度。...
2018-12-25 09:21:08 2140
原创 回调函数在-Kotlin-里的奇妙玩法
本文涉及到的知识点有扩展函数、Lambda表达式的高级应用在Android6.0之后系统加强了对敏感权限的管理,一些敏感权限必须要通过动态权限申请来获得,本文的内容就从这里展开;我使用的是网上比较流行的一个权限申请框架#/,当然本文的重点并不是如何使用这个库。如上所述,我们在一个应用中可能会有很多需要申请不同权限的位置,我们应该为每处需要敏感权限的位置做类似的处理。虽然我们使用了RxPermissions,但是还是需要在用户拒绝的位置写大量重复的弹窗提示代码,这一点也不优雅。...
2018-11-12 20:24:13 1722 1
原创 拿来就用的 RecyclerView 上拉加载
上拉加载在 RecyclerView 中应用已经十分普遍,很多封装好的 RecyclerView 框架中也都有集成该功能,但如果我们只是想在一个页面中实现改功能,引入一个第三方框架显然是不划算的。闲言少叙书归正传:OnLoadMoreListener.javaimport android.support.v7.widget.LinearLayoutManager;import andro...
2018-11-10 11:54:03 276
原创 委托模式 - 一个管理人员的一天
委托模式:委托模式是软件设计模式中的一项基本技巧。 在委托模式中,有两个对象参与处理同一个请求,接受请求的对象将请求委托给另一个对象来处理。举个例子,一个公司有普通员工、财务人员、管理者三个角色,管理者可以调用普通员工进行某项工作,可以派财务人员给某个员工开支。可以看出其中管理者并不会进行某项具体的工作,而是由各个人员来完成各自的工作。我们可以指派管理者去做某项工作,或是...
2018-07-02 08:36:02 254
StarUML 3.0.1 Mac 版破解补丁
2018-06-30
TA创建的收藏夹 TA关注的收藏夹
TA关注的人