自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

问道

人生就是一场修行,朝闻道,夕死可矣

  • 博客(72)
  • 资源 (6)
  • 收藏
  • 关注

原创 基于Netty实现Mqtt客户端(六)-发布消息

引言万事俱备,就欠发布消息了。前面的文章中,我们已经完成mqtt的连接、心跳、订阅、取消订阅处理,剩下就只有如何发布消息了。

2021-11-30 14:39:26 5506

原创 基于Netty实现Mqtt客户端(五)-订阅/取消订阅

引言我们在完成连接相关实现后,就可以接收其他客户端发送的消息了。客户端之间的消息通讯通过以下方式实现:客户端A向服务端订阅主题T;客户端B向服务端发送消息,并指定该消息是发给主题T的;服务端查看谁订阅了主题T,转发该消息给所有订阅主题T的客户端。订阅主题/** * 订阅主题 * * @param qos 0-至多发1次 * 1-至少送达1次 * 2-完全送达并回应 * @param topics 主题集 * @thr

2021-11-30 13:08:18 2032

原创 基于Netty实现Mqtt客户端(四)-心跳

引言我们在成功建立mqtt连接后,会发现客户端在经过一段时间后被服务端主动关闭连接,这是因为我们未按照mqtt协议定时发送心跳给服务器造成的。客户端需要发送PINGREQ报文给服务端,用于:在没有任何其它控制报文从客户端发给服务的时,告知服务端客户端还活着请求服务端发送响应PINGRESP确认它还活着使用网络以确认网络连接没有断开发送心跳private void startPingTask() { if (channel == null) return;

2021-10-13 16:42:40 3771

原创 基于Netty实现Mqtt客户端(三)-创建连接

如何创建mqtt连接要建立一个mqtt连接,分两个步骤:创建socket长连接发送连接报文(mqtt协议)创建长连接private void doConnect(MqttConnectOptions options, long timeout) throws Exception { // 创建连接 EventLoopGroup group = new NioEventLoopGroup(); connectTask = new AsyncTask<String>() {

2021-10-11 10:01:56 5006

原创 基于Netty实现Mqtt客户端(二)-使用netty-mqtt-client

netty-mqtt-client关于基于netty实现的mqtt客户端,可用于Java、Android环境。持续开发中,现已完成基本框架及功能,目前仅支持qos1级别通讯,后期根据需要再开发qos2、qos3级别。如何使用Gradle:repositories { mavenCentral()}dependencies { implementation 'io.github.x2ge:netty-mqtt-client:2.0.2'}连接MqttClient mqt

2021-09-27 10:31:45 5154

原创 基于Netty实现Mqtt客户端(一)-环境搭建

前言在Android开发中,之前一直使用org.eclipse.paho.client.mqttv3包来开发mqtt客户端,随之就遇到了线程不回收的难搞问题,还伴随其他一些莫名其妙的问题。事实教育我,mqttv3虽然用的人多,却并不稳定。后面无意中发现了Netty框架,一个实现了大量网络协议的框架,于是就基于Netty实现了mqtt客户端。环境搭建要开发一个mqtt客户端,我们首先就需要搭建一个完整的mqtt通讯环境。服务器:EMQX下载windows压缩包并解压:https://www.emq

2021-09-26 10:06:39 3427 2

原创 Java笔记之线程池

什么是线程池?我们可以将java的线程池简单的理解为一个带容器的工具类,提供线程创建、线程重用、线程销毁、任务管理等功能。为什么要使用线程池?在java虚拟机运行过程中,创建线程的代价是昂贵的。系统中的每个进程有自己独立的内存空间,而线程也同样需要。在JVM中默认一个线程需要使用256k~1M的内存,这取决于32位还是64位操作系统,具体数值不必深究,随着JVM版本的变化,这个默认值可能发生变更,我们只需要知道线程创建是需要申请并占用内存的。使用常规方式new Thread()创建线程,除了增加创

2020-06-30 17:28:58 144

原创 Android笔记之SeekBar的使用及问题

常用方式在xml中直接添加,个人比较倾向于使用支持包中的AppCompatSeekBar控件: <android.support.v7.widget.AppCompatSeekBar android:id="@+id/seekBar" style="?android:attr/progressBarStyleHorizontal" android:layout_width="0dp" android:layout_height=

2020-05-21 10:28:07 1072

原创 Android笔记之解决OkHttp解析dns超时时间无法设置的问题

## 问题使用OkHttp,设备切换路由后,访问网络出现长时间无响应,很久以后才抛出UnknownHostException. 这明显不是我们想要的,我们设置的connectTimeout属性似乎对dns的解析不起作用...

2018-12-29 12:07:16 6660 3

原创 Android笔记之分别使用Android、Java方式获取应用签名

一、通过Android方式获取应用签名使用Android的方式获取签名主要通PackageInfo类直接获取: /** * 获取指定应用的签名 * * @param packageName 包名 * @return 应用对应签名 */ private String getSign(String packageName) { ...

2018-03-26 14:44:10 1053

原创 Android笔记之使用CMake进行JNI开发(Android Studio)

不知道有多少朋友像我一样,被Android NDK开发的环境配置折腾到吐,然后放弃。从事Android工作几年了,也不太愿意接触NDK开发。不过福利终于来了,新的AS中开始使用CMake开发jni,开发c跟开发java一样简单,你只需单纯的执着于业务目标,跟折腾环境说拜拜。那我们现在就开始吧!环境需求要进行jni开发,AS需要以下环境: 方式一、在工程创建的时候添加首先使用AS(3.0)新建一个J

2017-12-16 18:26:45 25260 2

原创 Android笔记之快速简单的适配

大家都知道,做android开发适配屏幕是回避不了的问题,大量的xml布局、values文件、不同分辨率的图片让我们头疼,我们也一直在思考有没有一种方法直接改变缩放比例可以一次完成适配。那么,我们开始试试吧。 @TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR1) public static void initDpi(Context context

2017-10-11 15:54:44 624

原创 Android笔记之获取apk文件信息、图标

有的时候我们需要直接过去指定路径的apk信息,比如包名、应用名、图标等。/** * 获取apk包的信息:版本号,名称,图标等 * @param absPath apk包的绝对路径 * @param context */ public void apkInfo(String absPath,Context context) { PackageManager pm

2017-04-20 15:31:11 4153 1

原创 Android笔记之利用系统权限下命令安装apk

我们在定制Android系统的时候,应用商店是很重要的部分,市面上大部分的应用商店都采用了静默安装的方式来安装升级应用,这是怎么做到的呢?两点: 1.具有系统权限 2.使用pm install来安装 /** * 静默安装的实现类,调用install()方法执行具体的静默安装逻辑。 */ public class SilentInstall {

2017-04-20 09:24:16 543

原创 Android笔记之获取文件存储

有时候我们需要获取应用的缓存目录,然后在该目录下存储下载文件 @TargetApi(Build.VERSION_CODES.GINGERBREAD) public String getDiskCacheDir(Context context) { String cachePath = null; if (Environment.MEDIA_MOUNTED

2017-04-06 14:03:19 460

原创 Android笔记之获取apk文件包名、版本信息

有时候我们需要直接获取sd卡上的apk文件的包名、版本等信息 PackageManager pm = this.getPackageManager(); PackageInfo info = pm.getPackageArchiveInfo(task.filePath, PackageMan

2017-04-06 13:50:35 2724

转载 android笔记之安全开发之使用HTTPS

1、HTTPS简介阿里聚安全的应用漏洞扫描器中有证书弱校验、主机名弱校验、webview未校验证书的检测项,这些检测项是针对APP采用HTTPS通信时容易出现风险的地方而设。接下来介绍一下安全使用HTTPS的相关内容。1.1 为何需要HTTPSHTTP协议是没有加密的明文传输协议,如果APP采用HTTP传输数据,则会泄露传输内容,可能被中间人劫持,修改传输的内容。如下图所示就是典型的APP HTTP

2017-03-31 10:56:27 1736

原创 Android笔记之签名相关

1.生成签名文件 利用java的keytool可以完成。安装jdk之后配置好环境变量,在控制台下输入keytool出现以下信息: 生成签名文件:keytool -genkey -v -keystore highball-key.keystore -alias highball-key -keyalg RSA -keysize 2048 -validity 10000-keystore 将生成

2017-02-28 17:01:14 356

原创 Android笔记之获取文件MimeType

在Android中获取文件TimeType主要通过MimeTypeMap的getFileExtensionFromUrl、getMimeTypeFromExtension方法 private String getMimeType(String filePath) { String ext = MimeTypeMap.getFileExtensionFromUrl(filePat

2017-02-28 12:26:53 5036 1

原创 Android笔记之圆角布局

有时候我们在android布局的时候需要这样一种布局,这个布局左上、右下是圆角的,左下、右上是直角,而且不管你内部如何放置view,它都能维持这样的整体效果。 如图: 图片中上面部分是ImageView,下面部分是TextView,可以看出左上、右下被自然的圆角化了,这其中并未对ImageView、TextView做任何处理,下面我们就来看看如何实现这一布局。我们需要选择需要的四大布局

2016-09-21 17:52:13 547

原创 Android笔记之ImageView设置图片以灰色显示

有时候我们需要将ImageView加载的图片去彩色,以黑白灰度显示,如qq的不在线头像。 第一种,我们可以通过将彩色bitmap图转换成黑白灰度bitmap图: /** * 图片去色,返回灰度图片 * @param bmpOriginal 传入的图片 * @return 去色后的图片 */ public static Bitmap toGray

2016-09-10 16:20:21 11043 7

原创 Android笔记之利用TouchDelegate扩大View点击区域

有时候美工提供给我们的图标是很小的,但却要在如此小的图标上附加点击事件,如果不做处理,用户在使用的时候是很难点中的。当然,我们可以通过布局做调整处理,但是往往是布局变得更复杂。现在我们通过TouchDelegate来扩大View点击区域方式解决这个问题。 还不知道TouchDelegate的,可以先查下资料,大致说下它的作用:假设有两个View,分别是v1、v2,可以通过v1.setTouchDe

2016-09-06 10:58:47 1922 1

原创 Android笔记之获取IP、掩码、网关的有效方式

直接获取本机正在使用网络ip public static String getLocalIpAddress() { try { Enumeration<NetworkInterface> en = NetworkInterface.getNetworkInterfaces(); while (en.hasMoreElements(

2016-09-01 17:28:25 2636 2

原创 Android笔记之FastJson、GSon性能测试

测试环境:jar包gson2.7、fastjson1.2.15,系统win10_64 HashMap<String, String> hashMap = new HashMap<>(); for (int i = 0; i < 1000; i++) { hashMap.put("key" + i, "value" + i); }

2016-08-05 11:08:53 406

原创 Java笔记之socket中的SSL

本文根据Java实现 SSL双向认证这篇文章验证后编写,摘录了其中很多内容。常见的SSL验证较多的只是我们验证服务器是否是真实正确的,所谓的SSL单向认证。实际中,我们有可能还要验证客户端是否符合要求,也就是给我们每个用户颁发一个证书,且每个数字证书都是唯一的,不公开的。这样就能通过这个数字证书保证当前访问我服务器的这个用户是经过服务器认可的,其他人不可访问。双向认证 从第一个层面上,确保了服务器与

2016-07-27 16:53:37 3917 1

原创 Android笔记之沉浸式状态栏

今天对项目顶部的状态栏大黑条实在是忍无可忍,决定使用android4.4以上才支持的沉浸式状态栏。注意,4.4以上,也就是api19以上才支持哦! 效果图 实现: /** * 设置透明状态栏 */ private void setTransparent() { getWindow().requestFeature(Window.FEATURE

2016-05-26 10:53:56 325

原创 android笔记之zxing生成二维码、条码

在这之前,zxing项目还不知道如何下载、如何运行官方demo的同学请跳到 http://blog.csdn.net/quwei3930921/article/details/51206245 现在我们就来说说如何利用zxing核心库生成二维码、条码。 1.首先我们在官方demo的QRCodeEncoder.java中发现了以下方法: Bitmap encodeAsBitmap() thro

2016-04-21 11:57:30 691

原创 Android笔记之用eclipse给zxing打jar包

zxing是android常用扫描二维码、条码工具,如果使用eclipse导入官方demo,并打包底层库呢? 1.获取源码 https://github.com/zxing/zxing 直接download zip,解压后目录结构如图 2.使用eclipse导入 File–import–Existing Android Code Into WorkSpace–选择上图中的andorid

2016-04-21 09:58:10 2102

原创 Android笔记之zxing官方demo支持竖屏

1.在DecodeHandler.java文件, 修改decode方法中 PlanarYUVLuminanceSource source = activity.getCameraManager().buildLuminanceSource(data, width, height); 为// 竖屏对应修改,条码解析默认是横向解析,所以交换像素点x,y方向发生交换// Planar

2016-04-14 11:58:38 2471 1

原创 android笔记之ListView的setEmptyView方法

在ListView数据为空或者Adapter为空的时候,通常需要显示一个提示视图。一种办法是在ListView同样的位置放置一个同样大小的提示视图,通过代码控制该视图和ListView的隐藏、显示来解决。但是这样的代码控制往往让我们的代码看起来很乱,其实ListView内部已经帮助我们实现了这样的逻辑,我们只需要调用setEmptyView方法为ListView指定提示视图就行了。 首先需要在xm

2016-03-30 12:17:23 7415

原创 Android开发库VUtils之dp、sp转px

在android开发中,大部分情况下我们都用的dp值和sp值,这主要是用在xml文件中。但是很多时候我们需要在java代码中动态计算宽高、文字大小值,而这值是px值,这时我们需要将理想dp、sp值转成px值,以便于在更多的机型上能显示正常。 转换类:package com.v.vutils.utils;import android.content.Context;/** * dp、sp 转换为

2016-03-30 10:02:33 628

原创 Android开发库VUtils之MD5加密

Android开发中,在处理密码的时候经常用好MD5加密,那么我们就写个将密码通过MD5加密,再转成16进制的类吧!package com.v.vutils.utils;import java.security.MessageDigest;import java.security.NoSuchAlgorithmException;public class MD5Utils { protect

2016-03-29 18:05:03 681

原创 Android开发库VUtils之ViewHolder

Andorid中实现Adapter时,在getView中创建ViewHolder已成了约定俗成的事。那么怎么写才能让代码看起来更简单呢?package com.v.vutils.utils;import android.view.View;import java.util.HashMap;public class ViewHolder { public static <T extends V

2016-03-29 15:50:04 371

原创 Android开发库VUtils之关联代码行的log

很多时候我们不仅仅需要输出log,还需要知道这个log是在什么地方输出的,点击就能跳到对应代码,下面就是我写的log类,相信能帮到大家。 效果: Debug类:package com.v.vutils.utils;import android.util.Log;import java.text.SimpleDateFormat;import java.util.Date;import j

2016-03-29 10:55:13 331

原创 Android开发库VUtils之文字大小自适应TextView

很多时候我们需要文字大小随控件的宽变小,以保证文字能完整显示,现自定义控件如下:package com.v.vutils.views;import android.content.Context;import android.graphics.Paint;import android.text.TextPaint;import android.util.AttributeSet;import

2016-03-28 16:44:55 1832

原创 Android开发库VUtils之农历计算

有的android应用中在显示时间时,需要显示对应农历,这个时候就需要农历的计算类 效果图: 直接上类:package com.v.vutils.utils;import android.util.Log;/** * 中国农历算法 - * 实用于公历 1901 年至 2100 年之间的 200 年 */public class LunarCalender { private

2016-03-23 17:00:51 994

原创 Android开发库VUtils之圆形头像CircleImageView

开发android也有很长的一段时间了,突然觉得android开发可以更简单,很多时候我们总是重复的做着一些事,比如自定义dialog,网络访问,圆形头像等。也许我们可以把他们封成一个库?用的时候直接拿过来,或稍加修改。那么,从今天开始,我要把我在项目中用到的融进VUtils,让android开发变的更简单!圆形头像的实现网上代码已经很多,主要用到的技术是PorterDuffXfermode类,通过

2016-03-21 10:07:35 670

原创 Java笔记之正则表达式

[正则表达式]文本框输入内容控制 整数或者小数:^[0-9]+.{0,1}[0-9]{0,2}只能输入数字:”[0−9]∗ 只能输入数字:”^[0-9]*”。 只能输入n位的数字:”^\d{n}”。只能输入至少n位的数字:”\dn,”。 只能输入至少n位的数字:”^\d{n,}”。 只能输入m~n位的数字:。”^\d{m,n}”只能输入零和非零开头的数字:”(0|[1−9][0−9]∗

2016-02-19 11:07:33 286

原创 android笔记之adb在无开发环境电脑上运行

很多时候我们需要在没有android开发环境的电脑使用adb命令,只需要将adb.exe、AdbWinApi.dll、AdbWinUsbApi.dll从sdk的..\android_sdk\platform-tools目录下单独拿出来即可:没有sdk直接下载吧:工具下载

2016-01-21 09:37:57 896

转载 Android自定义View系列(aige)

http://blog.csdn.net/aigestudio/article/details/41212583 aige的自定义View文章,强烈推荐,思路清晰,内容相近,能收获很多。

2015-09-24 09:40:01 523

ApkToolKit

好用的 apk反编译图形化工具,内部使用Google的ApkTool,并已更新到最新

2017-12-16

adb独立运行工具

adb单独运行工具,从sdk中单独拿出来的,可以在无开发环境的电脑直接运行

2016-01-21

Android实现3D翻转动画

adroid简单实现3D翻转动画,一封装成类,可以拿来即用。----------->赶快下载

2015-05-15

CircleImageView.zip

自定义android圆形头像,已封装好,拿来就可以使用,也可做自定义控件学习

2015-05-14

SoundPool使用Example

SoundPool使用,主要实现了SoundPool加载、播放、释放声音资源的完整过程

2015-04-16

Android卫星菜单

android卫星菜单的属性动画实现,相当简单,还行进了ViewGroup封装,拿来就用

2015-03-20

空空如也

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

TA关注的人

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