Android
binaryshao
这个作者很懒,什么都没留下…
展开
-
RxJava+Retrofit+OkHttp组合在网络请求中的简单配置
本篇文章不会介绍这一组合的使用方法,网上已经有很多好的教程。 这里主要讲一下在网络调用中的个人使用心得,主要实现以下4个目标:请求前判断网络是否连接打印请求和响应,方便调试抛出正确请求异常统一判断返回结果主要用到了OkHttp的拦截器Interceptor.判断网络是否连接在网络请求前,最好能判断用户的网络连接状况,如果没有连接网络,则直接不发出请求,并抛出异常。 声明mNetInte原创 2016-10-22 15:18:11 · 1098 阅读 · 0 评论 -
Android动画一:帧动画
帧动画是按顺序播放一组预先定义好的图片,类似于电影播放。通过类AnimationDrawable来使用帧动画。首先在XML定义如下://res/drawable/loading_animation.xmlxml version="1.0" encoding="utf-8"?>xmlns:android="http://schemas.android.com/apk/res/andro原创 2016-03-22 22:58:23 · 581 阅读 · 0 评论 -
时间戳转换
转换1:日期转毫秒2016-03-15 13:36:00 转 1458020160000SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");sdf.parse(string).getTime();转换2:毫秒转日期1458020160000 转 2016-03-15 13:原创 2016-03-18 14:13:49 · 672 阅读 · 0 评论 -
shape文件编写示例
xml version="1.0" encoding="utf-8"?>xmlns:android="http://schemas.android.com/apk/res/android" > android:color="@color/red"/> android:radius="5dp"/> <stroke android:color="#32CD32"原创 2016-03-17 21:35:42 · 689 阅读 · 0 评论 -
Instant Run导致ClassNotFoundException
最近一个项目运行时出现了ClassNotFoundException,感觉有点像是64k问题,但很快排除了。而此处这个问题是apk文件在经过某种签名后才有,没有这种签名就不会出现。最后关闭了AS中的Instant Run,重新打包才解决了这个问题。Instant Run虽好,使用需谨慎。这个issue在AOSP上也有很多问答:https://code.google.com/p/android/iss原创 2017-04-14 07:29:26 · 1027 阅读 · 0 评论 -
JsonDeserializer——Gson自定义解析类型错误的字段
在开发中,定义好实体类和相应字段,Gson就可以很方便地帮助我们实现序列化和反序列化。可是有时候,后台传给客户端的json数据格式有误,其中的某些字段可能不是合理的类型,即,和我们在实体类中定义的字段类型不一致,此时就会出现类型转换错误,app原地爆炸!如何解决这一问题?最好的办法当然是后台确保数据类型正确,从源头上消灭问题。作为客户端开发,我们也要做好错误处理,应对各种场景。原创 2017-04-23 10:53:21 · 17123 阅读 · 3 评论 -
一种两位小数点数字输入的控制方法
最近很多地方用到了金额输入框,需要控制输入的金额,使其符合一定的条件,之前写过一种控制方法,自己项目上的输入金额要求都是一致的,所以这一种就可以搞定了。 这个方法控制的数字符合的要求如下:只能输入整数或者最多两位小数。 有需要的小伙伴可以参考一下,话不多说,上代码:先是一个正则,判断数字是否符合要求 /** * 小数,最多两位小数,如:10.2, 0.25, 20 *原创 2016-08-09 15:07:59 · 970 阅读 · 0 评论 -
Android原生时间控件DatePicker——月份由英文转数字
网上有很多优秀的开源时间控件,可以满足我们大部分的需求。但有时候还是会碰到系统自带的DatePicker,这个控件默认的月份显示为英文,如JANUARY、FEBRUARY等。如何将月份由英文改成数字,这是个好玩的问题。庖丁解牛DatePicker并没有提供相关api可以实现我们的需求,所以需要我们自己来分析。查看DatePicke的源码,它的布局文件是date_picker.xml,如下所示:<Li原创 2017-08-28 16:54:45 · 4843 阅读 · 0 评论 -
Android设备的蓝牙通信
设置蓝牙我们都知道,在手机的设置-蓝牙中,可以进行蓝牙设置的相关操作。其实可以不离开自己的APP,直接完成蓝牙设置的主要操作,可以结合自己的业务需求,相应地提示用户开启相关设置,提升用户体验。首先要知道,蓝牙连接需要知道待连接设备的MAC地址。已配对设备的MAC地址是已知的,只要对方开启了蓝牙并在连接范围内,就能连接成功。未配对设备则需要通过搜索才能知道MAC地址,知道MAC地址后如果直接请求和对方原创 2017-03-25 23:45:21 · 2072 阅读 · 0 评论 -
Bitmap转为单色位图,打印电子签名
背景项目中使用手写板,用户在上面签名后,将电子签名传到后台,同时将签名连同别的信息打印出来。手写板已经有很多优秀的开源库,也可以动手撸一个。手写板签名后可以得到签名的Bitmap,而所用的硬件是有打印接口的,可以接收Bitmap为参数打印图片,这样看似需求就能实现了。问题但打印接口接收的Bitmap必须是单色位图,类似于二维码,每个像素点非黑即白,非1即0。其实我们在使用zxing生成二维码时,也利原创 2017-11-10 21:22:55 · 3141 阅读 · 0 评论 -
蓝牙通信之保证数据的完整性
由来之前写过一篇Android蓝牙通信的文章,介绍了Android蓝牙的使用和一款蓝牙聊天app的原理,可以点这里看这篇文章。这篇文章是对上篇文章的完善和补充。原有问题上篇文章在分析蓝牙聊天app时提到过“管理连接线程”,在该线程中无限循环读取 InputStream,如果读取异常,说明蓝牙中断。 而读取的方法也很简单,直接读取数据到字节数组中:byte[] buffer =原创 2017-12-25 17:04:31 · 2104 阅读 · 0 评论 -
深入认识adb工具
前言官方文档本篇文章是对官方文档的理解和总结,大部分内容来自官方文档。adb即Android 调试桥,是一个通用命令行工具,其允许我们与模拟器实例或连接的 Android 设备进行通信。和Git、MySQL等一样,adb也有图形化工具,给我们更友好的交互体验。但不管是Android Studio开发环境还是豌豆荚等工具,实质都是用的adb命令和设备通信。因此,真正去了解ad原创 2018-01-23 23:37:40 · 1134 阅读 · 0 评论 -
Android 混淆 (不定期完善第三方混淆规则)
开启混淆在AS中,借助于SDK中自带的Proguard工具,开启混淆只需要在release闭包中添加如下两行代码: release { minifyEnabled true proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rule原创 2017-02-11 16:38:22 · 4266 阅读 · 0 评论 -
Android中线程的那些关系
去年画了张图,总结了一下Android中线程涉及到的一些方面,本来还想着写几篇博客分析的,奈何实在是精力有限,一直没写下去,估计以后也没精力写这个主题的文章了。今天是农历新年,是时候把这个坑填回去了,就贴出我总结的图吧。如有错误,欢迎赐教。新年快乐!原创 2018-02-15 16:52:22 · 299 阅读 · 0 评论 -
okhttp 3.4.2 拦截器使用总结
16年写过一篇RxJava+Retrofit+OkHttp组合在网络请求中的简单配置,本篇文章可以当作对它的补充。okhttp拦截器作为它的重要一员,如果好好利用往往能使我们事半功倍,先看一下拦截器的核心接口Interceptor:public interface Interceptor { Response intercept(Chain chain) throws IOExce...原创 2018-03-10 10:17:03 · 810 阅读 · 0 评论 -
Fragment返回栈的手动管理
如何回到上一个Fragment项目开中需要经常在不同的Fragment之间跳转,随时可能从一个Fragment页面跳到另一个Fragment页面。这些页面的切换还是比较简单的,根据业务需求,相应地调用FragmentTransaction的show()、add()、hide()、replace()等方法,再提交事务就可以了。当页面不是很多时,这种方法足以应付了。但“返回上一页”这种需求随着...原创 2018-10-25 17:47:13 · 1692 阅读 · 0 评论 -
Gradle 在 Android 中的应用
Gradle 是什么Gradle 是 Android 项目的默认构建系统,它以领域特定语言 (DSL) —— Groovy 语言描述和操作构建逻辑。Groovy 是一种适用于 Java 虚拟机 (JVM) 的动态语言,它的语法和Java非常相似,并且完全兼容Java。Android APK 的构建流程如下所示,Gradle 就是帮助我们自动实现这一流程的工具。需要注意的是,Gradle ...原创 2019-01-05 23:14:58 · 746 阅读 · 0 评论 -
序列化接口 Serializable 和 Parcelable
Serializable反射?serialVersionUID确保反序列化成功的关键 ANY-ACCESS-MODIFIER static final long serialVersionUID = 42L; * It is also strongly advised that explicit * serialVersionUID declarations use the &amp;amp;lt;...原创 2019-01-17 15:17:04 · 471 阅读 · 0 评论 -
Android动画二:View动画
1. 注意:View动画改变的只是显示,并不能在新的位置响应事件。2. 利用XML文件使用View动画(路径 //res/anim/animation_demo.xml)(2.1)在XML文件中定义View动画 标签1 动画集合 ,有个默认的加速减速插值器@android:anim/accelerate_decelerate_interpolator标签2 透明度动画标签原创 2016-04-02 17:58:08 · 674 阅读 · 0 评论 -
Android动画三:属性动画 (property animation)
Android动画三:属性动画 (property animation)参考了郭神的文章,感谢郭神。 因为郭神代码质量高,有部分代码直接借用了郭神相关文章中的,并无盗窃之意,只是学习记录。 郭神博客链接 : http://blog.csdn.net/guolin_blog/1. API 11(3.0系统)才加入的新特性注意:属性动画是3.0(API 11)中新加入的特性,在3.0以下系统无法使用原创 2016-04-04 00:50:41 · 843 阅读 · 0 评论 -
Android动画四:View的animate方法 (ViewPropertyAnimator)
Android 3.0 之后,Google给View增加了animate方法来直接驱动 属性动画,它可以被认为是属性动画的一种简写方式。要点整个ViewPropertyAnimator的功能都是建立在View类新增的animate()方法之上的,这个方法会创建并返回一个ViewPropertyAnimator的实例,之后的调用的所有方法,设置的所有属性都是通过这个实例完成的。在使用ViewPro原创 2016-04-04 21:16:48 · 10170 阅读 · 3 评论 -
华为手机打开log.v和log.d
华为手机默认关闭了V和D级别的日志输出,要按如下步骤打开:机型不同可能有所差异,大致相同进入拨号界面输入:*#*#2846579#*#*原创 2016-10-22 16:26:35 · 1479 阅读 · 0 评论 -
真机上使用Hierarchy Viewer
使用方法Hierarchy Viewer是帮助我们调试和优化UI的利器,大家应该都很熟悉了。 有以下两种方式进入Hierarchy Viewer: 在AS中选择Tools > Android > Android Device Monitor或者在工具栏点击图标打开Android Device Monitor后再点击Open Perspectives 选择Hierarchy View。CMD原创 2016-09-22 23:38:22 · 3245 阅读 · 0 评论 -
JS交互中的线程间协作浅析
引言当我们希望APP和网页有交互时,可以利用WebView中的addJavascriptInterface(Object object, String name)方法来实现。按照该方法的源码说明,它可以将Java对象注入到JavaScript context,这样JavaScript就可以使用这个Java对象的方法。参数object表示注入到JS的对象。 参数name表示在JS中调用该对象时所使用原创 2016-08-31 23:01:17 · 751 阅读 · 0 评论 -
【Google官方译文】Styles and Themes
说明:本文为Google官方译文,文中链接需要调整好上网姿势才能查看,原文地址Styles and Themes 希望本文能帮助到有需要的小伙伴。 译文尽量使用原来的配方,确保还是原来的味道^-^ 因水平有限,难免有错误之处,欢迎指正、吐槽。【译文开始】style 是指定view或window外观和格式的属性集合。它可以定义诸如高度、间距、字体颜色、字体大小、背景色等更多属性。style被定义翻译 2016-08-25 07:39:56 · 1289 阅读 · 4 评论 -
Base64上传图片
Base64网上有很多介绍,这里就不多说了,不过下面这段wiki上的介绍个人觉得挺不错的。wiki上的介绍一段引用自托马斯·霍布斯《利维坦》的文句:Man is distinguished, not only by his reason, but by this singular passion from other animals, which is a lust of the mind, tha原创 2016-08-23 16:58:50 · 1004 阅读 · 0 评论 -
百度地图SHA1值
在APP中集成百度地图时,需要先在百度控制台输入应用的SHA1值,我是按以下步骤获取的。使用cd命令,切换工作目录输入:keytool -list -keystore 签名文件目录输入密钥库口令:我直接回车就有了。如下图所示: 拿到上图中的SHA1值,复制到百度控制台就可以了。原创 2016-08-14 00:05:05 · 602 阅读 · 0 评论 -
Android 截屏并保存至相册
效果演示如下,因为大小限制,gif比较短截屏后的动画模仿了Android系统自带截屏的动画 计算好坐标,就可以截取自己所需区域 主类源码如下:package sbingo.com.screenshotplus;import android.animation.Animator;import android.animation.AnimatorListenerAdapter;import an原创 2016-08-12 00:02:16 · 4272 阅读 · 1 评论 -
自定义滑块验证View
最近项目上要把原先发送验证码的地方的图片验证改成滑块验证,于是重新自定义了一个View,先来看一下实现的效果图:中间那个可以拖动的滑块就是一个自定义View,下面贴上它的实现代码:package com.jfb315.view;import android.content.Context;import android.graphics.Canvas;import android.graphics原创 2016-07-02 06:26:09 · 2891 阅读 · 1 评论 -
SVG在低版本ImageView中的兼容
最近写了一个svg动画,显示在<imageview>中,svg是5.0以上新引入的特性,在低版本中需要做好兼容,否则运行在低版本上程序会直接crash。 网上找了一下,教程还是挺多的。主要是以下两步:使用较新版本的v7兼容库23.2.0在build里加一行代码在xml中使用app:srcCompat代替android:src但是发现虽然能跑起来,但svg直接没有显示了,看不到。 在谷歌官网原创 2016-06-17 23:28:18 · 6630 阅读 · 1 评论 -
AS中引入library 以及RxJava
http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2015/0623/3097.html 这篇文章介绍了gradle引入library的原理,以及在jcenter和Maven Central上传自己的libraryhttp://gank.io/post/560e15be2dca930e00da1083 RxJava 详解学习原创 2016-06-14 17:44:28 · 822 阅读 · 0 评论 -
充值画面——金额的选择和输入
先看一下做好的效果图 这个充值画面看着还挺简单的,几个预定的充值金额,还有一个手动输入框,但涉及到了蛮多的知识点,还是花费了一点时间的,这里总结一下:要求是只能输入数字,最多小数点后两位,下方的充值金额小计一栏始终显示两位小数,除非金额为0,才可以显示为0。GridView 的最后一项是EditText ,点击的时候不能在OnItemClickListener 中监听到,通过OnFocus原创 2016-04-28 21:17:51 · 5191 阅读 · 1 评论 -
getView()方法不被调用
今天在写GridView 的适配器时,发现适配器中的getView()方法一直不被调用,后天才发现适配器中的getCount() 方法的返回值不能为空或0,否则就会导致这种情况的发生。 保险起见,下面几个方法也都写成有返回值了,时间关系就没有一 一验证了。 @Override public int getCount() { return list原创 2016-04-27 20:16:12 · 785 阅读 · 0 评论 -
drawable中的selector子项顺序
匹配规则系统在匹配selector中的<item>时,会从上往下匹配,当某一项匹配时,便不再继续往下匹配。同时如果某个item的状态没有指定,那么它能匹配任何状态。注意点由于这样的匹配规则,下面的<item> 要注意是否能够匹配到,防止始终被上面的<item> 先匹配而无法生效。示例<?xml version="1.0" encoding="utf-8"?><selector xmlns:andr原创 2016-04-27 20:03:58 · 999 阅读 · 0 评论 -
IntentFilter的匹配规则
隐式调用Activity时需要Intent能够匹配目标Activity的IntentFilter中所设置的过滤信息,如果不匹配,将不能启动Activity。 一个Activity中可以有多个intent-filter,一个intent-filter中也可以有多个action、category和data。一个Intent只要匹配任意一组 intent-filter(即同时匹配这组intent-fi原创 2016-04-12 22:02:37 · 446 阅读 · 0 评论 -
Activity的启动模式与标志位
启动模式共有4个值:standard 默认模式singleTop 如果Activity已经在栈顶时,就不会被重新创建,同时它的onNewIntent方法会被回调,通过此方法的参数可以取出当前请求的信息。 singleTask 如果Activity已经这个栈中,就不会被重新创建,同时它的onNewIntent方法也会被回调。 可以指定任务栈,在AndroidMenifest.xml文件原创 2016-04-12 00:15:22 · 1885 阅读 · 0 评论 -
异常情况下的Activity生命周期
异常情况1. 内存不足Activity按优先级从高到低,分为以下三种:(1)前台Activity——交互中的Activity(2)可见但非前台Activity——比如Activity中弹出一个对话框(3)后台Activity——被暂停的Activity,比如执行了onStop();内存不足时,系统会按照以上优先级去杀死目标Activity所在的进程,如果一个进程中没有四大组件在执行,那么这个进程将很原创 2016-04-11 23:42:58 · 736 阅读 · 0 评论 -
不错的在线Button制作
链接:http://angrytools.com/android/button/原创 2016-04-11 11:53:25 · 1154 阅读 · 0 评论 -
使用 AIDL 进行 IPC 的流程解析和其他要点
AIDL 文件并不是必需的,只是有了这个文件,系统会帮助我们自动生成 IRemoteService.java 这个类AIDL 的包结构在服务端和客户端要保持一致,否则反序列化将会失败!IRemoteServiceStub抽象内部类,继承了 Binder,实现了 IRemoteServicestatic abstractProxystatic内部类代理,实现了 IRemoteSe...原创 2019-02-12 23:59:10 · 402 阅读 · 0 评论