铅笔的个人博客

技术博客

Android 低功耗Ble 蓝牙4.0多连接 开源框架 有更新!

ManyBlue 最近在开发Ble的项目,自己也在用这个 有发现bug会第一时间修复提交更新 如果有好的建议 可以邮件联系我 admin@javac.io 文档以Github上的为准,博客不会经常更新文章。 Github仓库地址 https://github.com/pencilso/ManyBlue 添加依赖 compile ‘io.javac:ManyBlue:1.0.5’ 依赖内部维护了一个Service 所以需要优先检测Service ManyBlue.runing(Context context) 启动服务 ManyBlue.blueStartService(Context context); 关闭服务 ManyBlue.blueStopService(this); 蓝牙开启状态 ManyBlue.blueEnableState(); 打开手机蓝牙 ManyBlue.blueEnable(true); 关闭手机蓝牙 ManyBlue.blueEnable(false); 注册|取消 事件 建议新建一个BaseActivity 然后继承自你现有的BaseActivit….

Android 动画使用 scale、alpha、translate、rotate、set 有更新!

scale:尺寸伸缩动画 alpha:渐变透明动画 translate:位移动画 rotate:旋转动画 调用动画文件 给View执行动画 动画文件可以存放在res下的anim目录 Android Studio的话 需要自己手动创建这个文件夹 比如说我在anim下创建了一个动画文件名为scaleanim.xml那么在Java中引用的话 //加载动画对象 Animation animation = AnimationUtils.loadAnimation(this, R.anim.scaleanim); //启动动画 view.startAnimation(animation); //另外 动画animation还有一个执行监听事件 使用如下 使用场景比如说启动页面 动画结束后跳转页面 animation.setAnimationListener(new Animation.AnimationListener() { /** * 动画启动 * @param animation */ @Override public void onAnimationStart(Animation ani….

JFinal请求参数注解判空 有更新!

在进行后端开发的过程当中,都会需要使用到字段非空判断,请求的字段如果为空的话,则不走Controller。 本文记录一下在JFinal当中配置自定义注解非空判断。 首先 新建一个注解类 import java.lang.annotation.Inherited; import java.lang.annotation.Retention; import java.lang.annotation.Target; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.ElementType; @Inherited @Retention(RetentionPolicy.RUNTIME) @Target({ElementType.TYPE, ElementType.METHOD}) public @interface EmptyInterface { String[] value(); } 创建自定义的Handler 继承自JFinal的Handler /** * Created by Pencil….

Android Provider冲突配置

Android的provider配置是用来兼容Android >=7.0的 一些操作文件的框架,比如说图片选择器,包括bugly的升级等等 都用到了provider配置 在工作中,碰到provider配置冲突的情况,有两个框架都引入了provider配置。 这时候编译肯定是不通过的。 至于解决办法也比较简单。 新建一个类 集成自FileProvider 然后在AndroidMainfest文件当中 把其中一个改成自定义的FileProvider 再次编译,编译成功。

Android差量更新-1 有更新!

Android差量更新-1 应用场景:省流量更新应用,只需要下载差异包,而不需要下载完整的apk进行安装。 这篇文章主要讲的是JavaEE端的实现,Android端之后的文章也会记录下来,另外使用到了Bsdiff 与 bzip2 将源码下载下来。 我这里是在Linux下编译源码,Windows上尝试了挺长时间 编译不起来,应该还是我太菜了 贴一张Windwos编译图 缺的东西挺多 后来直接放弃了,直接Linux进行编译。 解压从Bsdiff上下载来的源码,如图: 打开我们的Java工程。创建一个Diff工具类 也是一个JNI接口 package io.javac.diff_javaee.Utils; /** * Created by Pencilso on 2017/5/2. */ public class DiffUtils { public static native int diffFile(String oldPath, String newPath , String patchPath); } 打开终端,切到DiffUtils所在的目录,执行Javac编译 会….

基于原生JSON封装解析与生成工具 有更新!

将JavaBean 封装成JSON格式的字符串 封装JSON数据的代码片段 List listUser = new ArrayList<>(); //创建一个List集合 Map mapUser = new HashMap<>(); //创建一个Map集合 mapUser.put(“map-key”, new UserBean(4, “map-1”, 10, 2.456789, null,null, null)); //添加一个map的元素 listUser.add(new UserBean(3, “list-1”, 17, 1.456, null, null, null));//添加一个list的元素 UserBean[] arrayUser = { new UserBean(2, “array-1”, 16, 10.0123456,null, null, null) }; //创建一个对象数组并添加一个元素 UserBean us = new UserBean(1, “大白”, 18, 3.230, listUser, mapUser,arrayUse….

原生Android项目嵌入ReactNative 有更新!

首先需要先安装环境 这里就直接引用官方文档地址了,如果没有配置环境的话,请先配置一下环境。 搭建开发环境 初始化项目## 使用Android新建项目 最低版本需要设置为16 因为RN只支持最低版本为16 打开CMD命令,切换到工程目录下面,执行npm init 这时候终端会提示输入一些内容。 name:工程名 (不能有大写 随意起就行了) version:(版本号 这里回车默认就好了) description:this is react native project(这里就是一个描述) entry point:index.android.js(这是入口的js文件名) test command:(回车使用默认值) git repository:(输入git地址或者回车) keywords:react native(关键词) author:pencilso(作者) license:(回车使用默认就好) 配置package.json文件 这时候你的项目根目录下应该有了一个package.json的文件,打开它,找到scripts这一栏,在text这个字段后面添加一个字段,“star….

集成腾讯X5内核,初始化异常 有更新!

Application初始化X5的过程当中,QbSdk.initX5Environment(this, null); 抛出异常 btbs_crash_handler.so不存在。 解决方案 其实X5内核有一个so文件的,在demo工程当中的libs当中有。 解决办法:在libs目录下创建一个名为armeabi的文件夹,并且将该so文件复制到该目录下 PS:如果你在libs目录下还有arm开头的其他目录的话,那就都复制一份。亲测解决。 腾讯X5指南在下面找到SDK接入示例 解压,找到libs目录,下面就存放着一个so文件。

使用JDK的API进行简单的Base64加密 有更新!

这几天在看一点JavaWeb,尝试自己写一个小项目,在用户注册的时候我想的是将用户的密码加密再存入到数据库当中的。 既然是加密用户的密码,那肯定还得有解密。于是开始查资料,查了一堆加密算法,RES,AES,DES,Base64加密。 找了挺久,发现都需要依赖第三方jar包,果断放弃,我只是想简单的加密一下而已。没太大的必要再去依赖一个jar。 最后发现在JDK的api里面藏着一个Base64的类。。。不扯了,直接上代码。 这是我封装了的加密解密方法 /** * Base64解密 * @param encoder * @return / public static String aesDecrypt(String encoder) { try { byte by[] = Base64.getDecoder().decode(encoder.getBytes(“UTF-8”)); return new String(by, “UTF-8”); } catch (Exception e) { e.printStackTrace(); } return null; } /* * Bas….

自定义org-json包 有更新!

原生的Json在封装的时候,如果value为空的话,则不会添加这条键值对,想实现如果value为空的话也记录下来。像这种(key:null)。 于是找到Json源码中的put方法,看到在put的时候有一个判断,如果value是空的话,则remove了key。把这条代码注释一下就好了。 贴上原JSON代码 /** * Put a key/value pair in the JSONObject. If the value is null, then the * key will be removed from the JSONObject if it is present. * * @param key * A key string. * @param value * An object which is the value. It should be of one of these * types: Boolean, Double, Integer, JSONArray, JSONObject, Long, * String, or the JSONObject.NULL obj….

Parcelable&Serializable序列化使用笔记

Parcelable序列化接口使用## 首先先实现Parcelable接口 以下是JavaBean的代码片段 import android.os.Parcel; import android.os.Parcelable; public class UserBean implements Parcelable { private int id; private String name; private int age; public UserBean(int id, String name, int age) { super(); this.id = id; this.name = name; this.age = age; } /** * 该方法为Parcelable接口中的抽象方法 这里的返回值 返回0即可 / @Override public int describeContents() { return 0; } /* * 该方法为Parcelable接口中的抽象方法 * * @param dest * 该对象为序列的操作对象 通过该对象 进行序列化属性 */ @Over….

Centos下git-pull免密码操作

服务器使用的centos部署的Java项目,使用git pull拉下代码的class文件的时候,经常会提示需要输入帐号和密码。然后在码云官方群里询问了下解决方案。 在终端输入以下指令。 git config –global credential.helper store 然后再次执行pull操作,还是会提示一次输入帐号与密码。 断开终端链接,重连,再次进行pull操作,直接就拉取代码了,不用再输入帐号密码了

View的onClick第一次按下不执行

在开发中 给LinearLayout布局设置了onClick事件 然而发现 在第一次被按下的时候 没有反应 之后才能正常执行到onClick 于是想给LinearLayout设置一下onTouch看看有没有执行到onTouch 于是我就设置了一下LinearLayout的onTouch事件,然后。。。。 它就神奇的好了,第一次按下也会执行onClick。。。懵了。 只是设置了一下onTouch的监听而已 但是什么代码都没写。 怀疑是在事件分发的时候被什么给拦截了 这个LinearLayout被嵌套了几层 总之,问题解决了就好。

ScrollView嵌套RecyclerView不显示

ScrollView嵌套RecyclerView不显示 因为界面比较复杂 使用了ScrollView嵌套了RecyclerView RecyclerView显示正常 但是之后发现RecyclerView以下的所有布局全部消失了 查了下资料 谷歌的官方资料。 在ScrollView属性里面加上:android:fillViewport=“true” 以下是Google官方给的FillViewport解释: Indicates this ScrollView whether it should stretch its content height to fill the viewport or not.

局域网内连接Android进行调试

准备工作 一部Androd手机 一台电脑 局域网 使用USB数据线将手机连接到电脑上 其次安装驱动 驱动可以使用手机助手进行安装 比如应用宝 360之类的。 给Android SDK的adb工具配置环境变量 (当然 也可以不进行配置在执行命令的时候指定目录也可以) 使用cmd输入指令 adb devices 查看已连接的设备 可以看到已经连接上电脑的设备 这时候进行重定向端口的操作 指令:adb tcpip 5555 指令操作成功之后 这时候已经可以断开USB连接了 接下来查看手机在局域网中的IP地址 电脑使用cmd指令 adb connect ip地址 连接手机的IP地址 如果不进行重定向端口的话 是无法连接上的 会被手机终端拒绝连接 连接上之后 就可以在开发工具当中查看到该设备 可以在该设备上安装软件 并且重定向成功一次后 只要没有调用kill-server指令 以后局域网连接手机是不需要再重定向端口的 连接成功后 可以为Android设备安装软件 和卸载软件 关机 或 重启 都可以做到 常见adb指令: adb install apk路径 /**安装apk文件 adb unins….