
Android
文章平均质量分 93
Code-Porter
一位大前端开发程序员,从事多年前端开发,熟练App、网站、服务端、数据库、H5和小程序等平台的开发;在物联网领域开发有着丰富的经验,对技术要求苛刻、热爱分享、热爱新技术...
展开
-
Android通过反射EthernetManager Api设置以太网为静态IP地址或者动态获取IP
一、对于一些工控行业的Android主板一般都会扩展个以太网接口,也就是可以插网线进行上网;然后在系统设置页面有个以太网菜单可以进行IP、网关等设置,如下:二、那怎么通过代码去设置呢?1、Android系统在Framework层是有提供操作以太网Api的也就是android.net.EthernetManager,但是Google把Api给隐藏了;所以最终你是调用不了的2、那需要怎么操作才能调用到隐藏的Api呢?相信你肯定会立马想到使用反射去调用;对,没错!这里我就是使用的这个方式;当然如果你公原创 2020-08-21 16:16:31 · 9950 阅读 · 28 评论 -
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 · 1744 阅读 · 4 评论 -
记一次艰难的OutOfMemoryError:Could not allocate JNI Env问题排查
当我们看到这个错误的时候第一反应是不是内存泄露导致程序无法申请到内存而导致的,然而查下来的事实告诉我并不是的…原创 2020-05-27 17:32:05 · 3644 阅读 · 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 · 4562 阅读 · 4 评论 -
Netty在Android开发中的应用实战系列(六)——— 自定义协议进行拆包
之前的文章有写过Netty的拆包处理Netty在Android开发中的应用实战系列(四)——— 粘包 | 拆包 处理一、这篇文章重点讲一下Netty中自定义协议的拆包需要怎么处理,也就是Netty提供的LengthFieldBasedFrameDecoder拆包器二、一般情况下我们都会定一个数据包的格式,如下: 包头(共10个字节) 扩展数据 标识符...原创 2020-04-24 22:31:09 · 1037 阅读 · 2 评论 -
Viewpager迁移至ViewPager2实现Tab标签页面
ViewPager2是什么呢?ViewPager2 是 ViewPager 的下一代版本,带来了更强的功能并修复了之前的 bug;也就是解决了ViewPager的bug和不支持RTL布局等等其他问题,Google同时也放弃对ViewPager的维护了。ViewPager2相比ViewPager带来的新功能支持竖直滑动支持RTL布局可以使用DiffUtil…相关文档链接ViewP...原创 2019-12-16 16:26:19 · 4107 阅读 · 7 评论 -
使用Android APT(Annotation Processing Tool)让代码学会自己写代码
APT即注解处理器(Annotation Processing Tool)的简称原创 2019-12-02 15:10:51 · 1348 阅读 · 3 评论 -
Android 动态换肤技术原理 | 实践 及总结
动态换肤一般实现的原理对页面需要换肤的View进行标记在Activity#setContentView()加载view时获取到标记的view(后面会说是要怎么获取到)创建一个Library项目制作我们的皮肤包(res下的资源名称需要与app使用的一致,换肤就是通过使用的资源名称去皮肤包里加载相同名字的资源)创建皮肤包对应的Resources对象(用于加载皮肤包内的资源)点击换肤将我们标...原创 2019-11-20 15:24:03 · 1054 阅读 · 0 评论 -
Android实现二维码的生成和扫描
现在越来越多的app都具有扫码功能了,扫码支付,扫码登录等等。。。如果要进入网页只需打开相机对准二维码一扫就可完成了,省去了输入网址的繁琐的步骤大大的提高了效率,下面就让我们自己的app也实现这个功能。zxing源代码github地址:https://github.com/zxing/zxing这里面具有各个平台的源代码。这里使用的zxing库下载:https://github.com/a原创 2016-09-15 23:09:10 · 5640 阅读 · 1 评论 -
一个简单、轻量的Android版本更新库、内置了一个漂亮的更新对话框
请前往Github查看最新介绍AppUpdateGitHub地址 AppUpdate正在征集框架使用者信息,希望得到大家的支持由于Android Q版本限制后台应用启动Activity,所以下载完成会发送一个通知至通知栏(忽略showNotification的值,需要允许发送通知)由于Android Q版本限制应用访问外部存储目录(访问需要同时满足两个条件详情见...原创 2018-01-31 11:52:41 · 7961 阅读 · 10 评论 -
Android中Handler、MessageQueue、Looper三者的关系然后手写一套自己的Handler
时间总是比我们想象的过的要快,我们来不及抓住,让那些重要的时光走了一个又一个。Handler、Looper、MessgaeQueue三者的分工:handler 负责发送消息Looper 负责轮询MessageQueue中的消息,并把消息回传给handlerMessageQueue 负责存储消息(先进先出)Handler、Looper、MessgaeQueue三者的引用关系原创 2018-01-13 00:53:12 · 1252 阅读 · 1 评论 -
Android 文件目录存储介绍 缓存目录 | 私有目录 | 系统根目录 | 用户可见目录
先简要介绍一下Android系统的文件系统吧,本文基于原生Android M系统: 我们都知道Android系统内核就是个Linux、所以我们的文件系统与Linux也是基本一致的,最顶部的目录是 “/” 接下来就是 一些文件或者文件夹,如下图:/├── acct│ └── uid│ ├── cpuacct.stat│ └── ...├── c...原创 2018-04-25 23:17:31 · 11085 阅读 · 4 评论 -
Android 抽屉菜单滑动时模糊背景 | 毛玻璃效果
先来看看要实现的效果图 录制的有点模糊在补一张静态图 简单的分析一下: 1⃣️一开始我一直以为抽屉菜单的背景是一张半透明的高斯模糊图片,一直尝试着用ps做一张然后发现并没有什么卵用(纯色背景或者图片是无法做高斯模糊的); 2⃣️抽屉背景直接是首页模糊好的图片这样做的话在你滑动的时候你会发现效果更这个完全不一样。 3⃣️最后想到的也就是现在实现了这个效果的方案:当...原创 2018-06-13 21:44:14 · 1696 阅读 · 0 评论 -
Android中获取GPS搜索到的卫星颗数、并获取每颗卫星的信噪比
信噪比概念 信噪比,英文名称叫做SNR或S/N(SIGNAL-NOISE RATIO),又称为讯噪比。是指一个电子设备或者电子系统中信号与噪声的比例 信噪比越大此颗卫星越有效(也就是说可以定位)也就是说 设备搜索到的卫星颗数越多 设备定位效果越好,同时每颗卫星的信噪比值也要越高,如果信噪比值都是0的话;那跟没有搜索到一颗卫星效果是一样的。获取设备搜索到的卫星颗数首...原创 2018-06-08 23:03:05 · 19353 阅读 · 11 评论 -
Android通过AIDL实现接听电话、挂断电话操作 | 拨打电话
开发中需求永远都是在不断的超越预期而且也越来越变态,但是呢你做为一个开发还是要想尽办法去实现的。Android中拨打电话功能是很轻松的只需要几行代码即可,如下:首先还是得加上权限这个东西(或者动态申请)<!--拨打电话--><uses-permission android:name="android.permission.CALL_PHONE" />&l...原创 2018-06-10 13:44:00 · 5900 阅读 · 7 评论 -
Android DataBinding 你好!
一:使用DataBinding的第一步,只需要在app/build.gradle开启它android { compileSdkVersion 28 defaultConfig { applicationId "azhon.com.viewbinding" //.... } //开启dataBinding dataBindin...原创 2019-02-26 20:52:09 · 1867 阅读 · 0 评论 -
使用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 · 9142 阅读 · 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 · 17088 阅读 · 12 评论 -
Android快速开发框架之xUtils---网络模块
本篇博客将介绍一下xUtils的网络模块,想要学习的小伙伴请先看第一篇Android快速开发框架之xUtils—注解模块需要完成第一第二步哦。1.添加所需要的权限 <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission原创 2016-10-15 13:50:01 · 2631 阅读 · 1 评论 -
Netty在Android开发中的应用实战系列(五)——— 创建Web服务 | 作为HTTP服务器
Netty连续Socket文章系列Netty在Android开发中的应用实战系列(一)——— 搭建服务端与客户端Netty在Android开发中的应用实战系列(二)——— Encoder | Decoder | Handler 的使用Netty在Android开发中的应用实战系列(三)——— 心跳处理 | 断线重连Netty在Android开发中的应用实战系列(四)——— 粘包 | 拆包...原创 2019-09-23 22:19:28 · 2171 阅读 · 2 评论 -
Netty在Android开发中的应用实战系列(四)——— 粘包 | 拆包 处理
阅读本文建议从第一篇开始往后看本系列文章Netty在Android开发中的应用实战系列(一)——— 搭建服务端与客户端Netty在Android开发中的应用实战系列(二)——— Encoder | Decoder | Handler 的使用Netty在Android开发中的应用实战系列(三)——— 心跳处理 | 断线重连Netty在Android开发中的应用实战系列(四)——— 粘包 ...原创 2019-09-21 22:58:02 · 3537 阅读 · 8 评论 -
Netty在Android开发中的应用实战系列(三)——— 心跳处理 | 断线重连
阅读本文建议从第一篇开始往后看本系列文章Netty在Android开发中的应用实战系列(一)——— 搭建服务端与客户端Netty在Android开发中的应用实战系列(二)——— Encoder | Decoder | Handler 的使用一、客户端添加心跳处理这里就需要提到一个netty重要的IdleStateHandler,用于处理心跳机制;为当前连接通道设置 读、写、读写 空...原创 2019-09-19 22:51:48 · 3679 阅读 · 0 评论 -
Netty在Android开发中的应用实战系列(二)——— Encoder | Decoder | Handler 的使用
阅读本文建议从第一篇开始往后看本系列文章Netty在Android开发中的应用实战系列(一)——— 搭建服务端与客户端一、Encoder的作用将发送的数据进行编码成需要的数据格式,然后发送出去二、Decoder的作用将收到的数据根据数据协议进行解码,然后处理三、Handler的作用将解码好的数据进行处理四、下面们通过一个简单的一个示例进行收发数据定义一个传输的...原创 2019-09-15 17:30:13 · 3001 阅读 · 3 评论 -
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 · 10166 阅读 · 2 评论 -
Android通过蓝牙(BLE低功耗蓝牙)实现设备间通讯 | 客户端 | 服务端
这篇文章主要说的是通过BLE(Bluetooth Low Energy)蓝牙来实现一个聊天的效果;通常我们使用这个BLE都是手机去连接一些智能设备或者智能硬件然后进行通讯,也就是手机充当客户端,智能设备充当服务端;很少有用到通过BLE让两个手机进行通讯,手机既可以充当客户端也可以充当服务端一、话不多说,先看效果图 BLE最低支持Android4.3(API=18),如果还要充当服务端那么最...原创 2019-07-28 12:07:57 · 5801 阅读 · 3 评论 -
Android与单片机 | 开发板 | 智能硬件 | 智能设备 | 数据协议 |开发总结
一、缘起工作中经常遇到需要Android程序与各式各样的板子、智能设备进行交互,通信的方式也基本上都是Ble或者Socket tcp/udp等等…其中最重要的一点就是通信的协议、协议、协议重要的是说三遍;通信协议就是用来定义与设备交互的方式和交互过程中数据包的格式 如:(包头—数据包长度—数据—校验位—包尾)二、这里先来理理各种数据类型、所占的字节数等1、我们写的代码最终都是转化成各种机器所...原创 2019-06-15 00:55:31 · 5562 阅读 · 11 评论 -
Android 实现app的版本升级(迭代)
我们开发的app一开始肯定都是1.0版本的,但应用上线后公司肯定后期会对应用进行维护对一些Bug修复。这时候新的版本出来了我们就可以通过自己的应用来检查是否有新版本,如果有新版本就可以让用户直接下载安装就不用再去应用市场搜索下载了。1.先来说一下实现思路:每次启动应用我们就获取放在服务器上的更新日志(最好保存了最新的版本号,更新内容说明,apk下载地址),我们获取到版本号与当前应用的版本好进行对比,原创 2016-10-06 17:34:44 · 11464 阅读 · 5 评论 -
Android一个线程内连接多个tcp服务端
通常情况下我们客户端开启tcp去连接服务器都是一个连接一个线程;这样写代码也是比较easy的public class SocketTcpClient implements Runnable { private final String ip; private Socket socket; public SocketTcpClient(String ip) { th原创 2017-12-25 17:54:19 · 2116 阅读 · 0 评论 -
Android高级控件之RecyclerView上放置CheckBox
列表上放置单选框,实现多选功能。本文精髓都在适配器当中,做了很多的判断要仔细看清楚哦!对RecyclerView还不熟悉的可以查看一下这篇—Android RecyclerView自定义点击事件和长按事件1.我们先来看看实现的效果吧,长按可以将checkBox显示或隐藏,点击确定可以获取到你选中的条目。2.布局文件就不说了就一个RecyclerView和一个button,添加列表测试数据 /*原创 2016-10-26 00:05:29 · 15339 阅读 · 33 评论 -
对一个apk文件获取相应的版本信息和其他信息
需求是这样子的:一个app的新版本要通过另一台手机去检测升级并下载好这个新版本,然后使用局域网将这个apk传输到那台手机上在更新,听着是不是有点蛋疼。那么问题来了,我要怎么知道这个apk文件是新版本呢?1.先来说说获取自身应用的信息,有了packageInfo就可以获取到很多很多信息就不全部获取了 /** * 获取自身程序的相应信息 */ private void原创 2016-10-25 17:12:29 · 1714 阅读 · 0 评论 -
Android—-Rxjava与Retrofit初体验
RxJava(响应式编程): 在 GitHub 主页上的自我介绍是 “a library for composing asynchronous and event-based programs using observable sequences for the Java VM”(一个在 Java VM 上使用可观测的序列来组成异步的、基于事件的程序的库)。这就是 RxJava ,概括得非常精准原创 2016-10-18 11:23:22 · 1633 阅读 · 1 评论 -
Android快速开发框架之xUtils---注解模块
xUtils 包含了很多实用的android工具,本篇博客将介绍一下xUtils的注解模块。xUtils 支持大文件上传,更全面的http请求协议支持(10种谓词),拥有更加灵活的ORM,更多的事件注解支持且不受混淆影响…xUitls 最低兼容android 2.2 (api level 8)xUtils总共包括四大模块分别是:注解模块、网络模块、图片模块、数据库模块。1.在build.gr原创 2016-10-14 11:28:47 · 3232 阅读 · 0 评论 -
Android快速开发框架之xUtils---数据库模块
本篇博客将介绍一下xUtils的数据库模块,想要学习的小伙伴请先看第一篇注解模块完成第一第二步哦。Android快速开发框架之xUtils—注解模块:http://blog.youkuaiyun.com/a_zhon/article/details/52814534Android快速开发框架之xUtils—网络模块:http://blog.youkuaiyun.com/a_zhon/article/details/5281原创 2016-10-22 14:17:50 · 4887 阅读 · 2 评论 -
Android快速开发框架之xUtils---图片模块
本篇博客将介绍一下xUtils的图片模块,想要学习的小伙伴请先看第一篇注解模块完成第一第二步哦。 Android快速开发框架之xUtils—注解模块: http://blog.youkuaiyun.com/a_zhon/article/details/52814534 Android快速开发框架之xUtils—网络模块: http://blog.youkuaiyun.com/a_zhon/articl原创 2016-10-19 22:56:01 · 3474 阅读 · 2 评论 -
Android使用Socket(Tcp/Udp)协议进行数据传输(传输大文件)
Socket是什么:所谓Socket 通常也称作”套接字”,用于描述IP地址和端口,是一个通信链的句柄。应用程序通常通过”套接字”向网络发出请求或者应答网络请求。Socket内部又有两种协议(Tcp/Udp),我们来说说其各自的特点。先来说说网络编程的三要素1.IP地址:网络中计算机的唯一标识2.端口3.协议:通信的规则Tcp/Udp特点一、 TCP(协议):建立连接,形成传输数据的通道在原创 2016-08-31 13:38:40 · 14022 阅读 · 5 评论 -
Android初级控件TabHost
TabHost我们都知道是用来实现导航栏布局来切换页面的,这个也是元老级的控件了,现在逐渐被TabLayout,BottomNavigationBar,使用RadioButton自定义。。。等等给取代了。TabLayout有个好处就是它添加的是Activity而不像上面那些全部使用Fragment来显示内容。1.实现的效果图2.主布局中使用TabHost<?xml version="1.0" enc原创 2016-10-10 13:18:44 · 15039 阅读 · 3 评论 -
Android从图库选择照片并获取图片的path
在一个项目中难免要去获取本机图片。比如qq发表说说插入图片需要进入图库加载图片、设置一张壁纸也要进入图库选择图片…所以现在我们来实现这个功能1.既然是进入系统应用,那肯定少不了万能的Intent/** *以带结果的方式启动Intent,这样就可以拿到图片地址 */ Intent intent = new Intent(Intent.ACTION_GET_CONTENT); in原创 2016-09-19 21:56:14 · 7584 阅读 · 1 评论 -
腾讯QQ第三方登录的实现
腾讯开放平台首页SDK下载中心先看下Manifests所需要的权限<uses-permission android:name="android.permission.INTERNET" /><uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />需要注册的Activity<activity原创 2016-08-26 17:50:11 · 2485 阅读 · 1 评论 -
Android获取手机已安装的应用程序并启动
最近在做项目的时候,需要获取手机上的应用程序并启动,一个类似桌面软件的应用。1.布局我们使用一个GridView来呈现应用程序这里就不贴代码了,首先来获取已安装的app//扫描手机上的应用是一个耗时操作,所以把它放在一个线程中执行new Thread(new Runnable() { @Override public void run() {原创 2016-09-17 22:04:29 · 3451 阅读 · 0 评论 -
Android从服务器上下载文件
废话就不多说了直接看下怎么实现1.添加相关的权限,设备API大于6.0时需要主动申请权限<uses-permission android:name="android.permission.INTERNET" /><uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /><uses-permission原创 2016-10-07 17:48:01 · 9141 阅读 · 0 评论