自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(59)
  • 资源 (4)
  • 收藏
  • 关注

原创 个人开发者只要一行代码接入微信支付和支付宝支付

接入支付功能  对于个人开发者来说,我们很希望我们开发的App被广泛使用,同时可以获得一些额外收入,那就更好了。但是在微信开放平台或者支付宝开放平台申请支付功能,需要是企业才可以接入,对于我们个人开发者来说,门槛无疑很高,为了接入微信和支付宝支付还要去注册一家公司,成本有点高,前期可能只是为了探索市场,需要节约成本,后期如果收入颇厚,那么注册公司也是极其乐意和势在必行的。市面上的个人支付一、...

2020-09-01 17:49:55 8063 5

原创 个人开发者如何在App中调起微信支付

主要内容  关于企业资质开发者申请的微信支付,如何调起微信支付的,官方文档已经很详细,且百度上也有很多相关资料,这里不再介绍。本篇主要讲的是个人资质的支付如何在自己的App中调起微信支付。演示实现方式前端  演示这边用的是YunGouOS(微信支付服务商))提供的个人资质支付接口,这里在App内唤起微信,主要是使用H5支付方式,通过在App的WebView加载付款的H5支付链接,然后对支付链接进行以下处理: webView.webViewClient = object : WebViewCli

2020-09-01 11:02:54 4612

原创 探探快滑——自动滑动软件

介绍相信玩过探探的人都知道,只有当两个人都同时右滑对方,才能够匹配到聊天,如果对方右滑了你,但是你却没有右滑到TA,那你们岂不是错过。如果不想错过,那么唯一的方法就是不断的右滑,右滑,右滑,但是持续的右滑,时间久了,手指会酸痛,你是否想过有这么一个工具,你只需要打开探探,然后就可以自动右滑,不需要动手指,过一段时间将会有上百个匹配呢?现在,你想要的,探探快滑可以满足你。1.0.0版本特...

2019-03-07 16:13:28 18029

原创 2018年终总结,一份迟到了的年终总结

迟到的原因  本来年前就准备写年终总结的,在12月18号的时候提交了CSDN的博客专家申请(去年定下的目标之一),本想月底可以知道审核结果,看看完成去年的目标没有,结果审核了好久,到了今天才通过了我的申请,不过也算是完成了去年的目标了————成为CSDN博客专家,所以今天才开始写2018年终总结,一份迟到了的年终总结。我的博客地址:https://blog.csdn.net/Chay_Cha...

2019-01-02 21:04:37 1981

原创 今日头条最新视频解析方法

主要参考  如果小伙伴们想知道视频的解析规则的话,可以看下下面这篇博客,只不过该博客举的例子是用Python,而且关于取video的id的方法已经变了,所以没办法正确解析视频了。  参考博客视频解析一、读取html内容,获取videoId这里我们通过读取html的内容,如:http://toutiao.com/group/6631022373556453896/通过查看网站源码我们可...

2018-12-05 11:30:55 15234 7

原创 基于BaseRecyclerViewAdapterHelper封装的多条目Adapter,方便快捷,便于维护

项目地址: https://github.com/chaychan/MultipleItemRvAdapter  效果图,我之前做过的精仿今日头条,新闻列表中有好几种布局: Apk下载地址[点击下载体验]项目介绍  MultipleItemRvAdapter是在BaseRecyclerViewAdapterHelper的基础上对BaseQuickAdapter进行封装,在包含BaseRecycl

2018-03-22 19:33:50 3067

原创 Tinker热更新与AndResGuard资源混淆的结合

Tinker的配置  目前公司项目中使用Tinker作为热更新方案,由于Bugly的热更新是基于Tinker,并且提供了补丁的自动下载、合成、应用的功能以及补丁管理后台,所以集成了Bugly的热更新修复,关于Bugly热更新的集成,可以参考我之前发布的一篇文章:  Android热更新初探,Bugly热更新的集成和使用(让你的应用轻松具备热更新能力)   Tinker的配置划分在t

2018-01-19 14:48:43 4642 3

原创 APP瘦身大法--AndResGuard的使用

什么是AndResGuard  AndResGuard是一个缩小APK大小的工具,它的原理类似Java Proguard,但是只针对资源。它会将原本冗长的资源路径变短,例如将res/drawable/wechat变为r/d/a。为什么要使用AndResGuard  在以往的开发中,我们通常只混淆了代码,资源文件却暴露在他人面前,res文件夹下所有文件名的可读性过强,如图:我们可以看到res文件夹下的

2018-01-18 14:20:24 2518

原创 Android热更新初探,Bugly热更新的集成和使用(让你的应用轻松具备热更新能力)

介绍  在介绍Bugly之前,需要先向大家简单介绍下一些热更新的相关内容。当前市面的热补丁方案有很多,其中比较出名的有阿里的AndFix、美团的Robust以及QZone的超级补丁方案。但它们都存在无法解决的问题,这也是Tinker面世的原因。Tinker目前已运行在微信的数亿Android设备上,相对于其它热更新方案,Tinker相对比较优秀。什么是Tinker  Tinker是微信官方的Andr

2017-11-21 13:31:00 9909 1

原创 精仿今日头条

转载请注明出处:http://blog.csdn.net/Chay_Chan/article/details/75319452由来篇当初的梦想  一直都想尝试开发自己还没接触过的某类APP,以前刚入门的时候,就有一个梦想:开发社交类、地图类、新闻类、支付、电商类、直播类、游戏类这些APP。社交类的大二的时候已经开发过一款即时通讯的APP,用的是网易云信的SDK;地图、支付、电商

2017-07-18 19:05:06 25227 46

原创 BottomBarLayout——方便快捷地实现底部导航栏

本篇文章已授权微信公众号 guolin_blog (郭霖)独家发布 转载请注明出处:http://blog.csdn.net/chay_chan/article/details/73715607轻量级的底部导航栏  目前市场上的App,几乎都有底部页签导航栏,所以我们在开发的时候经常需要用到这个,虽然github上有不少已经封装好的底部导航栏的工具,例如bottombar,alphaIn

2017-06-25 12:44:29 7136 9

原创 数据传输加密——非对称加密算法RSA+对称算法AES(适用于java,android和Web)

数据传输加密  在开发应用过程中,客户端与服务端经常需要进行数据传输,涉及到重要隐私信息时,开发者自然会想到对其进行加密,即使传输过程中被“有心人”截取,也不会将信息泄露。对于加密算法,相信不少开发者也有所耳闻,比如MD5加密,Base64加密,DES加密,AES加密,RSA加密等等。在这里我主要向大家介绍一下我在开发过程中使用到的加密算法,RSA加密算法+AES加密算法。简单地介绍一下这两种算法吧

2017-02-28 17:06:21 44538 74

原创 Android7.0适配

本篇文章已授权微信公众号 guolin_blog (郭霖)独家发布转载请注明出处:http://blog.csdn.net/chay_chan/article/details/57083383关于Android7.0的适配  最近在软件的维护和更新过程中,了解到一些关于Android7.0的适配,在这里和大家分享一下,据我所知,需要对Notification、拍照、图片的裁剪进行适配一、Notifi

2017-02-25 15:53:54 36812 37

原创 Dart入门宝典第四章——面向对象编程之继承、抽象类、接口、Mixins的介绍

继承使用关键字extends继承一个类子类会继承父类可见的属性和方法,不会继承构造方法子类能够复写父类的方法、getter和setter单继承,多态性我们定义一个动物类Animal类,具有名字、年龄,还有一个是否食肉的属性,默认为true,还有一个run()方法。class Animal{ String name; int age; bool get eatMeat => true; void run(){ print("run..."); }}

2021-01-23 13:59:42 367

原创 Dart入门宝典第三章——面向对象编程之类的介绍

类与对象使用关键字class声明一个类class Person{}使用关键字new创建一个对象,new可省略void main() { var p1 = new Person(); var p2 = Person();}所有对象都继承于Object类属性与方法属性默认会生成getter和setter方法void main() { var p = new Person(); p.name = "黄家驹"; p.age

2021-01-23 13:58:54 325

原创 Dart入门宝典第二章——赋值运算符、控制语句、方法和闭包的相关介绍

赋值运算符= 普通赋值??= 当变量值为null的时候才赋值void main() { var a = 10; var b; b ??= 5; print(b); var c = 20; c ??= 5; print(c);}打印结果为:520上面代码中,b一开始并没有赋值,为null,此时使用??=赋值会生效,所以打印b的值为5;c由于已经赋值了,不为null,故??=不生效,c的值还是20。条件表达式三目运算符

2021-01-23 13:57:45 455

原创 Dart入门宝典第一章——变量常量声明和数据类型介绍

前言  其实在2019年初的时候已经看过Dart的入门教学视频,那时候刚开始学flutter,需要先学Datr语言,由于在公司一直做的都是原生开发,并没有真正使用flutter开发,最近打算走混合开发的路线,所以现在重拾Dart基础,很感谢雷宇老师的视频教程,这里将看视频后的笔记整理和归纳,以便日后的复习,也希望可以帮助到想要入门Dart语言的小伙伴。变量Dart中使用 var 声明变量, 可赋予不同类型的值未初始化时,默认值为null使用final声明一个只能赋值一次的变量void mai

2021-01-23 13:56:02 440

原创 2020年终总结,不寻常的一年

不寻常的一年  今年是不寻常的一年,突如其来的新冠病毒,打破了我们安宁的生活,也夺走了无数人的生命。以前几乎没有戴过口罩的我,从一开始的不习惯(呼吸觉得不顺畅),到现在的习以为然,出门都会自然地戴上口罩。  清明节当天,举国鸣笛致哀,致敬抗疫烈士,哀悼逝世的同胞,仍记得那天早上10点,我站在地铁内闭目悼念,潸然泪下,随后有感而生,赋诗一篇悼念《庚子年三月十二悼念》旗降半空满凄凄,华夏此日笛长鸣。身虽死兮神以灵,人间一片泣无声。养生生活  今年6月份开始,基本每个晚上会去附近公园跑个6公里,

2020-12-31 19:36:30 1704 4

原创 乐凯撒披萨1024程序员节暗号代码

function laesarSignal() { class Pizza { constructor(yours) { this.yours = yours; this.sequence = [1, 2, 3, 4, 5, 6, 7, 8, 9].map(n => Math.pow(2, n)) .sort((a, b) => a > b ? .

2020-10-24 14:01:04 1528 1

原创 2019年终总结,一位本命年程序猿的年终总结

  今天是2019年的最后一天,看到朋友圈很多人都在晒网易云音乐的年度报告,我也要晒一晒,不过我和他们不同,我是在博客里面晒(哈哈),主要也是因为这个才想起我还没写年终总结。本命年的一年  今年是我的本命年,尽管有大多数人都不信本命年会遭遇厄运,认为是迷信、传说,但是身为一个潮汕人,从小就成长在充满了对神明信仰的氛围中,对于本命年这一说法,自然也是相信的。所以在年初的时候就已经做好了祛邪、避...

2019-12-31 15:26:57 2940 11

原创 Android8.0 Service的适配框架

安卓8.0对后台服务的限制关于安卓8.0对后台服务限制的介绍,详情可以查看以下文章:Android 8.0 + Service开启方式兼容处理阅读文章后,我们知道了要如何对Android8.0 Service进行处理,主要有两点:1.启动服务的api,如果是安卓8.0及以上则需要调用startForegroundService(intent),8.0以下则是使用startService(i...

2019-10-31 10:26:15 1224

原创 CentOS定时备份mysql数据库和清理过期备份文件

  本篇主要用于介绍如何在linux服务器下编写备份mysql数据库文件和清理过期备份文件的脚本,以及设置定时任务启动脚本,做到每天定时备份数据库和清理过期备份文件的需求,同时也是一个踩坑记录,本以为网上会有很多相关的博客可以一下子就弄好,没想到花了半天时间,踩了不少坑,有些博客没有写清楚,只是简单地贴了一下命令,应该注意的地方也没有提示,所以这里记录下,希望可以帮到更多人。整个流程主要分为:...

2019-01-04 14:31:35 1551 3

原创 OkHttpClient源码分析(五)—— ConnectInterceptor和CallServerInterceptor

上一篇我们介绍了缓存拦截器CacheInterceptor,本篇将介绍剩下的两个拦截器: ConnectInterceptor和CallServerInterceptorConnectInterceptor该拦截器主要是负责建立可用的链接,主要作用是打开了与服务器的链接,正式开启了网络请求。查看其intercept()方法: @Override public Response inter...

2019-01-04 11:54:43 494

原创 OkHttpClient源码分析(四)—— CacheInterceptor

CacheInterceptor介绍完缓存之后,现在开始介绍缓存拦截器CacheInterceptor了,同样也是查看其intercept()方法,这里边上片段代码边解析,化整为零:@Override public Response intercept(Chain chain) throws IOException { Response cacheCandidate = cache !...

2019-01-04 11:53:33 634 2

原创 OkHttpClient源码分析(三)—— 缓存机制介绍

在讲解CacheInterceptor之前,我们先了解一下OkHttp的缓存机制,主要是Cache这个类,演示下如何使用OkHttp的缓存:private void cacheOkHttpRequest(){ OkHttpClient okHttpClient = new OkHttpClient .Builder() ...

2019-01-04 11:52:35 785 1

原创 OkHttpClient源码分析(二) —— RetryAndFollowUpInterceptor和BridgeInterceptor

OkHttp拦截器  拦截器是OkHttp中提供的一种强大机制,它可以实现网络监听、请求以及响应重写、请求失败重试等功能。如上图所示,这就OkHttp内部提供给我们的拦截器,就是当我们发起一个http请求的时候,OkHttp就会通过这个拦截器链来执行http请求。其中包括:RetryAndFollowUpInterceptor 重试和重定向拦截器BridgeInterceptor :桥...

2019-01-04 11:51:15 841 2

原创 OkHttpClient源码分析(一)—— 同步、异步请求分析和Dispatcher的任务调度

OkHttpClient同步请求的执行流程和源码分析同步请求示例OkHttpClient okHttpClient = new OkHttpClient.Builder().readTimeout(5, TimeUnit.SECONDS).build(); Request request = new Request.Builder().url("https://ww...

2018-07-25 12:08:16 1046

原创 仿微信打开红包旋转动画

介绍  公司的项目中包含IM模块,其中包含红包功能,在做打开红包的时候,觉得打开的按钮若不旋转感觉太过单调,没有乐趣,所以参考微信的红包,打开的时候,“开”字旋转起来。这里主要用的是帧动画,先上效果图:旋转动画的实现  一开始做的时候使用的是AnimationDrawable,定义animation-list,,尽管可以实现如上的结果,但是发现动画并没有特别流畅,有些卡顿,最后在github上找到了

2018-01-12 15:26:41 11075

原创 2017年终总结,开始写博客的第一年

结束校园生活,开始工作  今年是我开始工作的第一年,前半个学期实习阶段,开发了三个上线的应用,之前在学校的时候,做过不少练手的项目,有时心血来潮,还做了一些自己认为有趣的项目,但是这些项目都没有上线,没有发布到应用市场。在实习阶段开发的项目,运用了在校时学到的知识,自己的编程能力,也有所提高。七月份的时候,我离开了学校,结束了校园生活,同时也寻求新的工作。  之所以更换工作,其中的一个原因是公司主要

2017-12-30 11:17:45 1190 1

原创 拼音工具类PinyinUtils

介绍  最近在做好友列表的时候,仿照微信的好友列表,A-Z索引,需要用到好友名字的拼音,之前已经有封装好拼音的工具类,但是最近发现对于一些多音字,姓氏的处理没有做到位,比如姓氏单(shan),由于对于多音字没有做一些处理,仅仅只是取多音字列表的第一个,所以取到的拼音是dan,所以利用空闲的时间对这个拼音的工具类进行了处理。常见姓氏拼音SimpleArrayMap<Character, String>

2017-11-16 16:43:58 2846

原创 仿微信通知栏

先上效果图 点击通知栏后跳转并传值app下载体验点击下载通知栏图片通知栏的小图标建议使用纯白色,在通知栏显示的时候就是白色,拉下来的时候就会变成灰色的 在图片文件夹中放置不同尺寸的图标24 × 24 (mdpi) 36 × 36 (hdpi) 48 × 48 (xhdpi) 72 × 72 (xxhdpi) 96 × 96 (xxxhdpi)封装好的通知工具类调用弹出通知栏的方法

2017-10-28 14:24:00 4173 2

原创 Kotlin入门篇(六),list和map的使用

list的定义和使用fun main(args: Array<String>) { var nameList:MutableList<String> = ArrayList() nameList.add("小明"); nameList.add("小红"); nameList.add("小刚"); for((index,name) in nameList.wit

2017-08-19 15:26:34 4765

原创 Kotlin入门篇(五),Loop和Range,Kotlin中区间的定义和遍历

Loop和RangeKotlin循环的使用和区间的定义和Java有很大的不同,如:fun main(args: Array<String>) { var nums = 1..100 //[1,100] for (num in nums) { println(num) //打印1-100 }}其中 1 .. 100 定义了一个整数类型的数组,包含1-1

2017-08-19 15:25:13 2972

原创 Kotlin入门篇(四),如何使用when语句

when语句的使用Kotlin中when语句的使用,类似与Java中switch使用,如下,演示下when语句的使用://传入颜值分数获取颜值描述fun faceScoreDescn(score:Int):String{ var descn:String; when(score){ 10 -> descn = "令人惊艳的帅(美)" 9 -> des

2017-08-19 15:23:37 6992 2

原创 Kotlin入门篇(三),Kotlin中字符串的对比

字符串比较var str1 = "chaychan"var str2 = "chaychan"println(str1 == str2)比较两个字符串,如果两个字符串的内容一致,在Java中使用 str1 == str2 时,是比较两个字符串的地址值,很清楚两个字符串的地址不一样,返回false,但是在kotlin中,则不是如此,比较的只是字符串的内容,上述代码返回的是true。字符串的equ

2017-08-16 20:05:50 17903 3

原创 Kotlin入门篇(二),如何声明函数和处理空值

函数的声明函数的形式为: fun 函数名(参数名:参数类型):返回值类型{ //函数体}如Kotlin的主函数fun main(args:Array<String>):Unit{ //函数体}其中返回值类型Unit代码无返回值,可以省略不写,所以主函数可以写成:fun main(args:Array<String>){ //函数体} 有返回值函数示例:计算两个

2017-08-16 20:04:46 3871

原创 Kotlin入门篇(一),基本数据类型介绍、变量和常量的声明

Kotlin的数据类型数字类型数据类型 取值范围Byte (8位) -128 ~ 127Short (16位) -32768 ~ 32767Int (32位) -2147483648 ~ 2147483647Lon

2017-08-16 20:03:54 1629

原创 Android中如何使用代码打开各种类型的文件

介绍本篇用于介绍Android中如何打开各种类型的文件,如:音乐文件(mp3、wav、ogg等)、视频文件(3gp、mp4等)、图片文件(jpg、png、gif等)、安装包(apk)、文档(txt、doc、ppt、pdf、xls等),已经封装成工具类OpenFileUtils,末尾有源码地址。注意打开音乐、视频、图片、文档等文件是需要有读取SD卡的权限的,如果是6.0以下的系统,则直接在清单文件中声

2017-08-09 22:14:48 2539 1

原创 ShareSDKUtils,封装的分享工具类,使用默认的GUI或者自定义分享某个平台

介绍ShareSDKUtils是基于ShareSDK提供的API进行封装的工具类,方便于我们开发时分享的调用,支持使用默认的GUI,也支持自定义界面,点击事件中调用分享到某一个ShareSDK支持的第三方平台,使用ShareSDKUtils需要依赖ShareSDK提供的开发包。使用的方式为:如ShareSDKUtils.getInstance(Context context).useDefaultG

2017-08-09 16:34:49 641

原创 Android获取本机各种类型文件列表(音乐、视频、图片、文档等)

介绍本篇介绍Android获取本机各种类型文件的方法,已经封装成工具类,末尾有源码下载地址。提示获取音乐、视频、图片、文档等文件是需要有读取SD卡的权限的,如果是6.0以下的系统,则直接在清单文件中声明SD卡读取权限即可;如果是6.0或以上,则需要动态申请权限。FileManager的使用FileManager是封装好的用于获取本机各类文件的工具类,使用方式如:FileManager.getInst

2017-08-09 13:54:19 21743 5

TimeUtils,关于时间处理的工具类

关于时间处理封装的工具类

2017-08-09

关于时间处理的工具类,TimeUtils

一个关于时间处理的工具类,封装了常见的处理时间的方法。一个关于时间处理的工具类,封装了常见的处理时间的方法。一个关于时间处理的工具类,封装了常见的处理时间的方法。

2017-08-08

java、android、web三端通用的RSA和AES工具类、js

java、android、web三端通用的RSA和AES工具类、js,包含使用说明,之前设置所需0积分的,但是CSDN显示50积分,现改为1积分

2017-02-28

java、android通用的RSA和AES工具类

java、android通用的RSA和AES工具类

2017-02-28

空空如也

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

TA关注的人

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