自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

原创 Android与单片机 | 开发板 | 智能硬件 | 智能设备 | 数据协议 |开发总结

一、缘起工作中经常遇到需要Android程序与各式各样的板子、智能设备进行交互,通信的方式也基本上都是Ble或者Socket tcp/udp等等…其中最重要的一点就是通信的协议、协议、协议重要的是说三遍;通信协议就是用来定义与设备交互的方式和交互过程中数据包的格式 如:(包头—数据包长度—数据—校验位—包尾)二、这里先来理理各种数据类型、所占的字节数等1、我们写的代码最终都是转化成各种机器所...

2019-06-15 00:55:31 2485 11

原创 使用AndroidX + ViewModel + LiveData + DataBinding组件,同时使用RxJava2 + Retrofit2 + Glide等主流框架搭建的MVVM

TODO-MVVM:使用JetPack中的AndroidX + ViewModel + LiveData + DataBinding组件,同时使用RxJava2 + Retrofit2 + Glide等主流框架进行搭建GitHub项目地址项目中basicLibModule为搭建的基础框架可以拿来就用,sampleModule为项目的使用案例效果图2018年谷歌I/O大会发...

2019-04-02 22:02:31 5897 1

原创 一个简单、轻量的Android版本更新库、内置了一个漂亮的更新对话框

请前往Github查看最新介绍AppUpdateGitHub地址 AppUpdate正在征集框架使用者信息,希望得到大家的支持由于Android Q版本限制后台应用启动Activity,所以下载完成会发送一个通知至通知栏(忽略showNotification的值,需要允许发送通知)由于Android Q版本限制应用访问外部存储目录(访问需要同时满足两个条件详情见...

2018-01-31 11:52:41 5015 7

原创 欢迎进入阿钟的博客导航——快速查找所有博客

世上最遥远的距离,是我在if里你在else里,似乎一直相伴又永远分离;世界上最痴心的等待,是我当case你是switch,或许永远都选不上自己;世界上最真情的相依,是你在try我在catch。无论你发神马脾气,我都默默接受,静静处理。到那时,再来期待我们的finally。Java浅谈Java设计模式—-建造者模式浅谈Java设计模式—-单例模式浅谈Java设计模式—-装饰...

2016-08-25 17:25:26 4578

原创 Android串口开发,基于官方的android-serialport-api增加支持设置奇偶校验|数据位|停止位

SerialPortPlus项目地址Android串口开发,基于谷歌官方的android-serialport-api增加支持设置奇偶校验、数据位和停止位使用步骤第一步:app/build.gradle进行依赖implementation 'com.azhon:serialport:1.0.0'第二步:打开串口1.打开串口try { SerialPortPlus serialPortPlus = new SerialPortPlus("/dev/ttyMT2", 9600);

2020-08-02 12:52:35 86

原创 记一次艰难的OutOfMemoryError:Could not allocate JNI Env问题排查
原力计划

当我们看到这个错误的时候第一反应是不是内存泄露导致程序无法申请到内存而导致的,然而查下来的事实告诉我并不是的…

2020-05-27 17:32:05 260 1

原创 解决Android SoundPool播放多个音效没有播放完成回调通知

一、在我们需要播放一些短促的音乐或者音效的时候(播放mp3文件),通常会使用SoundPoolApi来播放因为可以对音频文件进行预加载至内存中从而能够迅速播放出来二、SoundPool的简单使用SoundPool soundPool = new SoundPool.Builder().build();int soundId = soundPool.load(App.getApplication(), R.raw.mp3_0, 1);soundPool.play(soundId, 1, 1, 0, 0

2020-05-17 17:00:26 726 2

原创 Netty在Android开发中的应用实战系列(六)——— 自定义协议进行拆包

之前的文章有写过Netty的拆包处理Netty在Android开发中的应用实战系列(四)——— 粘包 | 拆包 处理一、这篇文章重点讲一下Netty中自定义协议的拆包需要怎么处理,也就是Netty提供的LengthFieldBasedFrameDecoder拆包器二、一般情况下我们都会定一个数据包的格式,如下: 包头(共10个字节) 扩展数据 标识符...

2020-04-24 22:31:09 335 2

原创 Java实现部标JTT1078实时音视频传输指令——视频流负载包(RTP)传输

一、 说一说实现的思路1.接收平台方下发的0x9101命令(实时音视频传输请求)2.解析下发的0x9101命令,拿到音视频上传数据的服务器IP和端口号3.开始获取设备摄像头的每一帧视频数据,这里需要注意的是:视频数据支持的格式有:H.264,H.265,AVS,SVAC;详细的可以查看JTT1078协议的(表12)4.将每一帧的数据封装成(表19)音视频流及透传数据传输协议负载包格式...

2020-03-07 15:08:22 1580 3

原创 使用Netty封装的部标JTT808 | JTT1078 | 渝标协议 数据上传Android端

使用Netty封装的 部标JTT808,JTT1078,渝标协议 数据上传Android端示例项目地址:GitHub地址已实现的功能JTT808注册鉴权心跳位置信息汇报设置终端参数JTT1078历史音视频查询、回放与下载指令实时音视频传输实时音视频流及透传数据传输位置信息汇报渝标上传抽烟报警上传打电话报警上传未注视前方报警上传疲劳驾驶报警...

2020-03-01 22:42:08 573

原创 Android使用AudioRecord录制PCM音频、PCM转AAC、使用MediaRecorder直接录制AAC编码音频

Android为我们提供了两个音频处理的API:AudioRecord和MediaRecorderAudioRecord:偏底层的apiMediaRecorder:对AudioRecord进行包装的api

2020-02-29 21:06:08 912 2

原创 Android采集摄像头的视频流数据并使用MediaCodec编码为H264格式

前言:博主在写这篇文章之前可以说是在`音视频这方面`,知识积累与经验几乎为0;所以在实现这个功能上也是费了好一番功夫和精力把它给搞出来了,所以以此篇文章纪念一下。一、首先就是需要先打开摄像头,并拿到视频的每一帧数据1、相机权限是必须要的,API>=6.0还需要动态申请 (动态申请权限代码略过,详情见文末源码)<uses-permission android:name="a...

2020-02-26 23:59:18 999

原创 Viewpager迁移至ViewPager2实现Tab标签页面

ViewPager2是什么呢?ViewPager2 是 ViewPager 的下一代版本,带来了更强的功能并修复了之前的 bug;也就是解决了ViewPager的bug和不支持RTL布局等等其他问题,Google同时也放弃对ViewPager的维护了。ViewPager2相比ViewPager带来的新功能支持竖直滑动支持RTL布局可以使用DiffUtil…相关文档链接ViewP...

2019-12-16 16:26:19 1193 7

原创 使用Android APT(Annotation Processing Tool)让代码学会自己写代码

APT即注解处理器(Annotation Processing Tool)的简称

2019-12-02 15:10:51 497 3

原创 Android 动态换肤技术原理 | 实践 及总结

动态换肤一般实现的原理对页面需要换肤的View进行标记在Activity#setContentView()加载view时获取到标记的view(后面会说是要怎么获取到)创建一个Library项目制作我们的皮肤包(res下的资源名称需要与app使用的一致,换肤就是通过使用的资源名称去皮肤包里加载相同名字的资源)创建皮肤包对应的Resources对象(用于加载皮肤包内的资源)点击换肤将我们标...

2019-11-20 15:24:03 421

原创 Netty在Android开发中的应用实战系列(五)——— 创建Web服务 | 作为HTTP服务器

Netty连续Socket文章系列Netty在Android开发中的应用实战系列(一)——— 搭建服务端与客户端Netty在Android开发中的应用实战系列(二)——— Encoder | Decoder | Handler 的使用Netty在Android开发中的应用实战系列(三)——— 心跳处理 | 断线重连Netty在Android开发中的应用实战系列(四)——— 粘包 | 拆包...

2019-09-23 22:19:28 546

原创 Netty在Android开发中的应用实战系列(四)——— 粘包 | 拆包 处理

阅读本文建议从第一篇开始往后看本系列文章Netty在Android开发中的应用实战系列(一)——— 搭建服务端与客户端Netty在Android开发中的应用实战系列(二)——— Encoder | Decoder | Handler 的使用Netty在Android开发中的应用实战系列(三)——— 心跳处理 | 断线重连Netty在Android开发中的应用实战系列(四)——— 粘包 ...

2019-09-21 22:58:02 1026 2

原创 Netty在Android开发中的应用实战系列(三)——— 心跳处理 | 断线重连

阅读本文建议从第一篇开始往后看本系列文章Netty在Android开发中的应用实战系列(一)——— 搭建服务端与客户端Netty在Android开发中的应用实战系列(二)——— Encoder | Decoder | Handler 的使用一、客户端添加心跳处理这里就需要提到一个netty重要的IdleStateHandler,用于处理心跳机制;为当前连接通道设置 读、写、读写 空...

2019-09-19 22:51:48 901

原创 Netty在Android开发中的应用实战系列(二)——— Encoder | Decoder | Handler 的使用

阅读本文建议从第一篇开始往后看本系列文章Netty在Android开发中的应用实战系列(一)——— 搭建服务端与客户端一、Encoder的作用将发送的数据进行编码成需要的数据格式,然后发送出去二、Decoder的作用将收到的数据根据数据协议进行解码,然后处理三、Handler的作用将解码好的数据进行处理四、下面们通过一个简单的一个示例进行收发数据定义一个传输的...

2019-09-15 17:30:13 620 1

原创 Netty在Android开发中的应用实战系列(一)——— 搭建服务端与客户端

一、简单的介绍一下Netty官网地址:https://netty.io官网Jar包下载:https://netty.io/downloads.htmlJar包也可以去mvnrepository下载:https://mvnrepository.com/artifact/io.netty/netty-all直接上官网的介绍再好不过了谷歌翻译过来就是Netty是一个异步事件驱动的网络应用...

2019-09-14 17:44:12 2498 1

原创 Android自定义输入车牌号键盘、车牌简称 | 数字 | 字母键盘

为了便于用户快捷的输入车牌号码便需要自定义个车牌键盘,而不是使用系统的键盘输入,上效果图:横屏效果竖屏效果一、首先我们要来分析一下需要做哪些东西默认展示车牌的省份简称特殊车牌(使、领、警、港、澳)删除键切换为数字和字母按键车牌号中是没有I、O字母的(容易与1、0)分混淆,故不需要这两个按键I、O这两个按键的位置正好使用学、挂来填充二、根据效果图可以看出键盘就...

2019-08-31 15:45:59 1393

原创 记一次BLE(低功耗蓝牙)扫描周围设备慢的一个坑

BluetoothManager bluetoothManager = (BluetoothManager) context.getSystemService(Context.BLUETOOTH_SERVICE);bluetoothAdapter = bluetoothManager.getAdapter(); bluetoothAdapter.startLeScan(leScanCa...

2019-08-22 23:32:34 1078

原创 Android通过蓝牙(BLE低功耗蓝牙)实现设备间通讯 | 客户端 | 服务端

这篇文章主要说的是通过BLE(Bluetooth Low Energy)蓝牙来实现一个聊天的效果;通常我们使用这个BLE都是手机去连接一些智能设备或者智能硬件然后进行通讯,也就是手机充当客户端,智能设备充当服务端;很少有用到通过BLE让两个手机进行通讯,手机既可以充当客户端也可以充当服务端一、话不多说,先看效果图 BLE最低支持Android4.3(API=18),如果还要充当服务端那么最...

2019-07-28 12:07:57 569

原创 Android应用上架国内各大应用市场对应用Logo、应用截图要求整理

这里我整理的一些比较多人使用的一些应用市场,当然还有一些遗漏的欢迎大佬们补充对于国内的应用市场环境,突然好羡慕AppStore、Google Play 说多了都是泪…上架大家一定要在上线前一两个月去申请软著、软著、软著腾讯应用宝(需要软著)上架流程应用小图标:尺寸16*16px,大小20k以内,PNG格式的图片应用图标:尺寸512*512px,大小200k以内,PNG格式的图片,建议...

2019-07-03 14:58:10 3288 5

原创 使用python生成微信好友个性签名词云图

生成词云主要使用了itchat、jieba、wordcloud这三个依赖库itchatitchat是一个开源的微信个人号接口,使用python调用微信从未如此简单。jieba“结巴”中文分词:做最好的 Python 中文分词组件wordcloud词云图,也叫文字云,是对文本中出现频率较高的“关键词”予以视觉化的展现,词云图过滤掉大量的低频低质的文本信息,使得浏览者只要一眼扫过文本就可...

2019-06-21 14:30:00 590 1

原创 Android集成高德地图导航SDK、实现App内进行导航、打开高德App导航

这篇文章就主要来讲一下集成高德的导航SDK,实现app内导航;这样就不用调用高德的App了一、申请key之类的这里就不说了自己去申请就ok高德开放平台高德开放平台—导航sdk高德开放平台—导航sdk下载二、我这下载的SDK如下,只有3D地图和导航SDK这两个三、配置工程导入导航SDK和so库文件配置Manifest.xml添加权限<!--用于访问网络,网络定位需要...

2019-06-04 18:23:23 5022 7

原创 浅谈Java设计模式之——抽象工厂模式

上一篇文章我们介绍了一下简单工厂模式,这一节就接着来说抽象工厂模式浅谈Java设计模式之——简单工厂模式一、什么是简单抽象工厂模式抽象工厂模式是所有形态的工厂模式中最为抽象和最其一般性的。抽象工厂模式可以向客户端提供一个接口,使得客户端在不必指定产品的具体类型的情况下,能够创建多个产品族的产品对象。看了上面一大堆你可能还是没看懂具体是什么意思,下面通过一个具体的案例来说明一下:二、假...

2019-05-27 23:48:36 399

原创 浅谈Java设计模式之——简单工厂模式

简单的介绍一下简单工厂模式的概念:简单工厂模式属于类的创建型模式,又叫做静态工厂方法模式;通过专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类从介绍我们就可以提炼出一些特点:每一个实例具有共同的父类一个特定的类来负责创建其它类的实例现在我们通过工厂模式来实现一个例子:我们现在需要一个水果工厂来获得

2019-05-26 17:03:04 338 2

原创 关于ObjectAnimator的rotationX、rotationY在部分华为设备上消失的问题

吐槽一下HUAWEI,你为什么要这么的秀高高兴兴的写了个绕Y轴旋转的动画,运行一下完美展示ObjectAnimator animator = ObjectAnimator.ofFloat(imageView, "rotationY", 0, 360f);animator.setDuration(3_000);animator.start();你以为这样就完了吗?当然没有,测试MM过来...

2019-04-25 15:39:33 1056 4

原创 Android DataBinding 你好!

一:使用DataBinding的第一步,只需要在app/build.gradle开启它android { compileSdkVersion 28 defaultConfig { applicationId "azhon.com.viewbinding" //.... } //开启dataBinding dataBindin...

2019-02-26 20:52:09 1155

原创 Android JTT 808-2011 道路运输车辆卫星定位系统终端通讯协议及数据格式

关于JTT 808数据协议这一块网上资料还是比较少的,而且做的人也少;所以无形给不熟悉的开发人员带来了很大的难度,所以这篇文章也就将我自己经历的一个808项目写出来分享给大家。一:首先先介绍一下这个JTT808全称:JTT 808-2011 道路运输车辆卫星定位系统终端通讯协议及数据格式文档截了下开头的图片如下:二:JTT 808中所使用到的数据类型数据类型描述及要求...

2018-12-19 11:38:19 1960 2

原创 Android开发Gradle高级技巧、自定义Gradle Task、打包完成自动签名、执行Shell脚本

先说下为什么有这篇文章吧,最近在写一个应用需要进行系统签名;每次我都需要先将apk生成然后使用sign.jar和系统证书进行签名,非常的麻烦而且tmd还是搞两个系统也就是每次都需要用两个系统证书分别进行签名…一:每次我都需要两个不同的设备的安装包,所以我使用多渠道打包这样每次进行打包都会给我生成两个apk 。如下代码:app.gradle ,这里需要注意的是多渠道打包,需要指定一个flavo...

2018-12-18 16:07:10 3259 1

原创 《Android开发艺术探索》IPC机制初认识

Android IPC 简介    IPC是Inter-Process Communication的缩写,含义为进程间通信或者跨进程通信,是指两个进程之间进行数据交换的过程。说起进程间通信,我们首要理解什么是进程,什么是线程,进程和线程是截然不同的概念。按照操作系统中的描述,线程是cpu调度的最小单元,同时线程也是一种有限的系统资源。而进程一般指一个执行单...

2018-12-07 15:53:07 198

原创 《Android开发艺术探索》Activtiy的生命周期

一:Activity的生命周期正常情况下启动一个Activity的生命周期:onCreate、onStart、onResume、onPause、onStop、onDestory这里说一下每一个生命周期函数的描述onCreate表示Activity正在创建,这这个函数中我们一般是做初始化操作比如加载布局资源onStart表示Activity正在启动,即将开始这时Activit...

2018-12-07 15:49:22 155

原创 解决Mac连接RIOCH(理光)打印机无法打印问题

所使用的打印机型号:RICOH Aficio MP C4502A与官方技术人员联系说 Mac不支持打印彩色的内容,只能打印黑白;Windows是可以打印彩色的…(只能默默说句fuck the printer)连接方式如下:第一步:进入系统偏好设置,点击打印机与扫描仪第二步:点击“+”添加打印机第三步:选择以IP的方式连接,然后按下面方式填写最后点击添加即可使用了,...

2018-12-03 17:24:12 13626 3

原创 一个你无法处理的Exception ——— GirlFriendNotFoundException

今天又到了一年一度的程序员节了(10.24),在这里祝广大的程猿/媛 们升职加薪 早日迎娶白富美!哈哈哈…话说回来你想找个女朋友不存在的好了回到正题上 talk is cheap, show me the code! try { Girl girl = new Girl(); //找个女朋友 girl.findMyGirlFriend(); } catch ...

2018-10-24 13:04:04 794 2

原创 使用Python3开发的一款Android截屏神器

Android设备截屏利器只需要一根数据线将手机连上电脑(已打开USB调式并已允许调试)便可以在电脑上轻松的对手机进行截屏了,再也不需要先截个图然后登录个QQor微信将截屏发送至电脑了。同时支持`Windows`和`Mac`平台哦需要安装Python3.7 不会安装的话网上找找教程,在配置个环境变量现在你只需要敲如下命令执行即可$ python __main__....

2018-08-28 21:59:52 1182

原创 Python学习之——使用pymysql对数据库进行操作

今天就来简单的学习一下通过pymsql依赖库,对MySQL数据进行一些基本的操作pymsql源码地址pymsql文档地址安装pymsql依赖库$ pip install pymsql一:我们先创建好一个数据库并建立一个简单的表结构创建数据库选择utf8mb4 -- UTF-8 Unicode字符集和utf8mb4_general_ci排序规则 创建...

2018-08-13 15:31:02 668

原创 通过Python实现一个简单的爬虫——获取掘金网站文章列表

先来看下实现的结果掘金文章爬虫源码这里通过python命令直接运行我们的爬虫程序,很轻松的就获取到了网站首页的第一页文章(爬取的Android分类下文章),当然代码量也是只有几十行。一: 首先我们要获取到我们要爬取的地址,然后通过分析网站返回的网页或者json数据来获取我们需要的数据;如下图:二:接下来就需要对html解析来,这里使用到了BeautifulSoup这个h...

2018-08-11 21:00:04 2013 2

原创 Android Studio —— 多服务端接口地址打包技巧

Android开发中必不可少的就是向服务端请求数据,服务端小伙伴就会给你一个URL(http://192.168.1.194:8080)这样 你就可以愉快的进行开发;但是随着app的开发然后又多了外网测试地址、正式地址等等….所以这篇文章就来说说,如何优雅的管理项目中各种接口地址我这里使用的是Retrofit2进行网络请求,需要定义一个BASE_URL供Retrofit进行初始化;当地址...

2018-07-26 11:06:31 1051 2

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