自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

猫的阁楼

欢迎光临....

  • 博客(203)
  • 资源 (5)
  • 收藏
  • 关注

原创 Android Q分区存储权限变更及适配

分区存储在Android Q中引入了分区储存功能,在外部存储设备中为每个应用提供了一个“隔离存储沙盒”。其他应用无法直接访问应用的沙盒文件。由于文件是应用的私有文件,不再需要任何权限即可访问和保存自己的文件。此变更并有助于减少应用所需的权限数量,同时保证用户文件的隐私性。权限变更Android Q 更改了应用对设备外部存储设备中的文件(如:/sdcard )的访问方式。继续使用 READ_E...

2019-06-30 11:15:46 32978 6

原创 Android安全开发之浅谈密钥硬编码

Android安全开发之浅谈密钥硬编码(来源:阿里移动安全)添加链接描述

2019-03-21 16:46:25 1521

转载 【转】Android 9 Pie 兼容性常见问题及注意事项

应用不兼容的常见原因使用了系统的 ClassLoader 加载 org.apache.http.* 的库Android M 就已经开始移除对 Apache HTTP client 的支持。而 Android P 的系统 ClassLoader 已经不支持加载 org.apache.http.包 (抛出 NoClassDefFoundError),应用必须用自定义的 ClassLoader 来加...

2018-09-22 00:56:54 3098

原创 9.0版本SoundPool播放无声问题

9.0版本SoundPool播放无声问题音效没声音很多情况:1、不支持的音效格式(ogg,MP3,wav)2、加载未完成时调用play播放音频。表现为前面无声音,过一段时间有声音。可以实现onLoadComplete()监听等待加载完成后再去播放。 pool.setOnLoadCompleteListener(new SoundPool.OnLoadCompleteListe...

2018-09-19 13:37:55 3351

原创 技术新闻

新闻Google I/O大会2018本周召开 5月9日,谷歌一年一度的I/O开发者大会在旧金山山景城开幕。谷歌将AI作为公司的重点发展方向,大会谈到了谷歌AI在不同领域的应用,在两个小时的KeyNote演讲中,谷歌着重介绍了谷歌助手(Google Assitant)、安卓新版本Android P Beta的更新,同时讲到了一些谷歌软件(谷歌地图、Google News等应用的更新),还谈到...

2018-06-27 19:52:52 300

原创 使用TinyPNG批量压缩图片

注册apikeyhttps://tinypng.com/developers安装环境需要用到python,pip1、安装pythonPython 2 需要大于2.7.9 brew install python或者 Python 3: 需要大于等于3.4brew install python32、安装pip 使用pip官网get-pip.py安装一直不...

2018-02-08 12:04:38 2254

原创 Git提交代码相关命令

正常提交相关0、装好git后,要做一个全局配置:git config --global user.name “用户名”git config --global user.email “邮箱”1、克隆代码 git clone -b dev_1_0(以dev分支为例)并hook安装 git clone -b dev_1_0 ssh://仓库地址 && hook配置 && g

2018-02-02 11:01:01 418

原创 How to disable cursor positioning and text selection in an EditText? (Android)

防止用户在任何地方移动光标位置。光标应始终停留在当前EditText某段选中文本位置。除此之外,用户不应该能够在EditText中选择任何内容。你有什么想法如何实现在Android中使用EditText?public class CustomEditText extends EditText { private CustomSelectionChangedListener lis

2018-01-31 12:04:14 635

原创 android TextView屏蔽复制粘贴文本选择菜单

方式一: 设置handle的size为0,这种方式对原生的系统有效,对国产room无效<?xml version="1.0" encoding="UTF-8"?><shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle">

2018-01-25 22:08:29 5003

原创 getSelectionStart() doesn't work in android, is always 0

当用户点击EditText时,调用int startIndex = et.getSelectionStart();获取的值总是0 ,没法准确定位光标位置,因为getSelectionStart与用户Touch或click无关,与用户选择文本相关,默认情况下,当用户执行长时间单击时,光标将出现文本中,并允许用户高亮显示的文本选择。高亮显示的文本指的是选择,而不一定是用户上次触摸的地方。

2018-01-04 22:44:08 1828

原创 Android软键盘输入imeOptions

android:imeOptions根据输入框输入完成后要执行的业务逻辑指定软键盘右下角Action按钮的样式和行为,如让右下角按钮显示为“搜索”,点击后执行搜索逻辑。imeOptions 有下面一些值:IME_ACTION_UNSPECIFIED. 编辑器决定Action按钮的行为IME_ACTION_GO Action按钮将作为 “开始” 按钮。点击后跳转到输入字符的意图页面 I

2017-12-02 22:46:24 11604

原创 TextView内部类Layout光标相关方法

使用TextView自定义EditView时,需要自己去维护光标位置,用到一些方法,简单的介绍下:1.获取行数getLineCount()2.获取指定行边界getLineBounds(int line, Rect bounds)获取该行的外包矩形bounds, 字符的顶部Y坐标就是rect的top 底部Y坐标就是rect的bottom3.根据坐标找到对应行getLineForVertical(int

2017-09-24 21:30:42 2232

原创 Why does getView return wrong convertView objects on BaseAdapter?

ListView 加载两种不同类型的layout,自定义adapter,重写了getItemViewType和getViewTypeCount方法,代码如下:class ContentAdapter extends BaseAdapter { private Context mContext; private List<String> mData; /*

2017-09-09 21:14:29 733

原创 请不要滥用SharedPreference

由于输入法方面的工作,使用SharedPreference比较的,使用中也不是特别规范。这篇文章在使用SharedPreference上给出了很多好的建议。1.不要存放大的key和value!我就不重复三遍了,会引起界面卡、频繁GC、占用内存等等,好自为之!2.毫不相关的配置项就不要丢在一起了!文件越大读取越慢,不知不觉就被猪队友给坑了;蓝后,放进defalut的那个简直就是愚蠢行为!3.读取频繁的

2017-06-10 22:02:46 854 1

原创 [JNI] 开发实例(2) 编译libwebsocket,封装jni函数,搭建IM通信基础服务

WebSocket协议是基于TCP的一种新的协议。WebSocket最初在HTML5规范中被引用为TCP连接,作为基于TCP的套接字API的占位符。它实现了浏览器与服务器全双工(full-duplex)通信。这段介绍来自百科。当然websocket也可以用于android建立长链接,实现IM通信 优势:节省内存空间。当然这个是服务端并发时候节省内存空间,支持的并发量更大 ,这个我没做服务端没有验证

2017-04-08 16:55:00 5816 6

原创 给定一个字符串,求第一个不重复的字符

这个问题有两个关键词 :第一个,不重复第一个 也就是说我们要保证这顺序,使用LinkedHashMap来记录字符个数,因为LinkedHashMap维持的元素顺序与插入顺序一致,而我们正是按照字符串中字符出现的顺序来将字符插入Map中的。 不重复 使用map的value保存计数,每插入一个元素时候给map的value值加1,当我们扫描字符串时,只需要迭代LinkedHashMap并找出值为1的元素

2017-03-26 16:16:49 2531

原创 标号1-n的n个人首尾相接,1到3报数,报到3的退出,求最后一个人的标号

闲来无聊,拿着这个算法题看了下典型的约瑟夫问题。这里使用最直白的方式来解答这道题:思路: 1.把所有人先放入数组中,size为n+1 2.当报到m的人,且dead不等于n-1时,此人退出游戏,这时候把数组中这个值置为0,报数从新开始 3.如果这个人报数等于m,并且已经死了n-1个人,说明当前这个人就是最后的一个public class demo{ public static void

2017-03-26 16:09:34 3697

原创 Fresco 5.0以上内存持续增长问题优化

fresco是android一款比较好的图片处理框架,特别是在5.0以下,效果很佳。在5.0以下系统,Fresco将图片放到一个特别的内存区域ashmem中。这块内存我们通过android studio查看时不会显示,回收机制与java回收机制差不多。当然,在图片不显示的时候,占用的内存会自动被释放。这会使得APP更加流畅,减少因图片内存占用而引发的OOM。5.0以上系统,我们使用了Fresco,但

2017-03-24 13:29:28 8826 18

原创 教你手写Java层handler机制

handler消息框架1.Looper是消息循环类,负责从消息队列取消息,然后通过handler转发给UI线程,它包含mQueue成员变量,mQueue是一个消息队列MessageQueue。2.MessageQueue是消息队列类,它包含了mMessages成员;mMessages是消息Message的实例。MessageQueue提供了next()方法来获取消息队列的下一则消息。3.Messag

2017-03-12 15:15:03 21439 4

转载 【转载】Android面试题集

感谢Machivellia收集 ,原文链接http://www.jianshu.com/p/59e03fc7e6d4Java 方面133个Java面试问题列表[http://www.importnew.com/17232.html](http://www.importnew.com/17232.html)40个Java集合面试问题和答案[http://www.jcodecraeer.com/a/

2017-03-04 16:49:54 890

原创 [JNI]开发实例(1)封装libjpeg库 保证图片质量压缩图片

为什么libjpeg这么好用,这里不做介绍了,自行去搜索很多blog有介绍,也可以反编译微信,淘宝等大厂app,你都会发现libjpeg.so的身影。直接上代码撸环境: android studio 2.2.3下载编译好的libjpeg.so当然你也可以下载libjpeg.a静态文件,然后把你的jni与这个.a打成一个so库; 这里为了方便就直接下载github上编译好的so文件了,你也可以尝试

2017-03-04 15:45:21 2547

原创 高度可定制化 IM聊天界面设计

背景: 做IM聊天,对接其他部门业务需求,老是接到需要定制个性化的消息UI,接手这块业务时候,以前的代码写的比较死,怎么样的呢: 一个BaseAdapter,包含2个view (RecvView,SendView)每次来消息不断的根据消息类型去隐藏和显示已经在xml中配置好的view样式。比较坑吧,不仅绑定的死死的,没法扩展,就是看也很难看懂,不断的在view中if-else判断消息类型,处理消

2017-02-17 22:48:49 3041 1

原创 android使用Charles抓包https请求

以前使用抓包神器fiddler抓包还是很厉害的,听说过Charles一直没用过,只从换了mac,fiddler就没发用了,只能研究下Charles,这都不是重点,主要是现在的请求都使用了https抓包就不太好了,各种证书验证,无意中发现有人研究出来抓包https的方法,按照其步骤操作了一遍,神奇的效果发生了,https也可以咦步骤:1.下载Charles 4.0.2http://xclient.in

2017-01-18 17:12:10 27703 5

转载 c/c++混编到的问题 extern "C" 介绍【转】

c与c++连接发现出现了找不到具体函数的错误:以下是假设旧的C程序库C的头文件/———–c.h————–/#ifndef _C_H_#define _C_H_extern int add(int x, int y);#endifC的源文件/———–c.c————–/int add(int x, int y){ return x+y;}C++的调用/———–cpp.cpp————–/

2017-01-17 13:54:40 475

转载 cmake使用介绍【转】

一、 基本使用安装:下载二进制包后可直接解压使用从源码安装则执行命令:./bootstrap; make; make install——尝试执行bootstrap失败使用:cmake dir_path,生成工程文件或makefile文件 二、 概念out-of-source build,与in-source build相对,即将编译输出文件与源文件放到不同目录中; 三、

2017-01-17 12:15:01 649

原创 微信小程序开发-新闻简讯demo

闲来无聊体验了一把微信小程序开发,从开发的角度来说,还是蛮好的事,减少开发成本,不需要复杂的环境配置,api使用简单,开发出来的产品体验也还不错,确实很多不常用的app可以使用小程序来开发。不过现在还很多限制,API不够完善,我只是尝试使用几个常见的控件就遇到很多不支持,后期完善API后,是个不错的方向。 效果图: 1.环境配置官方下载开发工具包,安装完成就可以进入开发了。2.项目结构开发之

2017-01-14 21:13:07 3910

原创 解决 Android N 上报错:android.os.FileUriExposedException: file:///storage/emulated/0/

解决android N文件访问crash android.os.FileUriExposedException file:///storage/emulated/0/xxx原因:Android N对访问文件权限收回,按照Android N的要求,若要在应用间共享文件,您应发送一项 content://URI,并授予 URI 临时访问权限。 而进行此授权的最简单方式是使用 FileProvider

2017-01-13 20:32:34 83163 7

原创 几种实现ListView顶部悬浮效果

顶部悬浮,这个是老生常谈的控件,一搜索网上大篇幅的介绍,有几种实现方式: 1.简单的实现ListView顶部悬浮http://blog.csdn.net/ljfbest/article/details/387656412.Android 仿美团网,大众点评购买框悬浮效果,使用的ScrollView http://blog.csdn.net/xiaanming/article/details/1

2017-01-08 22:16:48 7335

原创 Error inflating class android.support.design.widget.CollapsingToolbarLayout

<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.andro

2017-01-02 10:40:13 5268 2

原创 [JNI]开发之旅(9)JNI函数字符串处理

通过前面章节接触到字符串类型,知道字符串类型的数据是不能直接操作的。本节来介绍不能操作的原因及操作字符串的一些函数。JNI 把 Java 中的所有对象当作一个C指针传递到本地方法中,这个指针指向 JVM 中的内部数据结构,而内部的数据结构在内存中的存储方式是不可见的。只能从 JNIEnv 指针指向的函数表中选择合适的 JNI 函数来操作 JVM 中的数据结构。前面示例中,访问 java.lang.S

2017-01-01 13:43:46 2319

原创 [JNI]开发之旅(8)传递参数给JNI函数

本节将介绍在JNI编程中如何传递参数和返回值。首先要强调的是,native方法不但可以传递Java的基本类型做参数,还可以传递更复杂的类型,比如String,数组,甚至自定义的类。jni.h中定义了很多接口供我们操作。其实在前面章节的例子中,我们已经使用到很多java传递参数给jni的例子,只是没有重点介绍,接下来会对传递几种基本类型参数,string,数组,java自定义对象这些参数介绍。1. 基

2017-01-01 00:34:14 3459

原创 [JNI]开发之旅(7)JNI函数中调用java对象的方法

在jni函数中我们不仅要对java对象的数据域进行访问,而且有时也需要调用java中类对象已经实现的方法。接下来我们对对象的方法调用,调用步骤与访问数据域相似。1.获得实例对应的class类2.根据class类获得方法的method id3.根据method id和对象实例获取方法4.操作方法实例1:JNI方法java对象public方法java代码 定义一个setSex方法,通过acces

2016-12-31 20:51:46 5128 1

原创 [JNI]开发之旅(6)JNI函数中访问java类中对象的属性

JNI函数的实现在c/c++中实现的,如果想访问java中定义的类对象的实例域需要三个步骤:1.通过GetObjectClass()函数获得该对象的类class,返回值是一个jclass; 2.调用GetFieldID函数得到需要访问的实例域(变量)在该c类中id 3.调用Get【Type】Field()得到访问的变量值。其中【Type】对应变量的类型。 例如:java中有一个int a...

2016-12-25 12:28:28 3698 2

原创 [JNI]开发之旅(5)访问c/c++函数

前面介绍了那么多,不在废话,直接实例开撸,不懂步骤的请看: [JNI]开发之旅(1)开发流程介绍调用C++函数1.调用c++函数printf,输出一个hello JNIjava层: 定义一个JNIUtilsclass JNIUtils{ public native void printC(); static{ System.loadLibrary("native-l

2016-12-24 20:33:14 1213

原创 [JNI]开发之旅(4)项目架构介绍

前面介绍了一个系列的c语言基础及jni相关类型字符定义,现在开始进入JNI开发主题。 首先,看一下项目的体系架构。项目分为3个部分:java部分,c/c++部分,以及一个makefile文件。java部分:定义native方法,并加载动态连接库,当然还有我们项目的源码,class文件,res资源等。c/c++部分:包括.c或.cpp文件以及.h头文件,在.c/.cpp文件中实现java层中定义的n

2016-12-24 19:16:26 1259

原创 [JNI]开发之旅 (3)jni域描述符说明

域描述符类描述符方法描述符前面一节介绍到相关数据类型映射,接下来介绍下描述符1.域描述符1、基本类型的描述符 java类型 feild描述 byte B char C short S int I long J float F double D boolean Z域描述符比较容易记,除long(J),boolean(Z)例外,其

2016-12-24 18:56:35 1810

原创 [github高级控件]带你走近->自定义标签云

在项目中经常遇到一些标签云的效果,比如城市的选择,景点类型选择,酒店房型选择 这些常见使用标签云效果就比较好了。 今天一步步的写一个标签云view,借鉴于github上TagCloudView 1.准备工作attr.xml<resources> <declare-styleable name="TagTextViewStyle"> <attr name="t_textSi

2016-12-18 15:04:35 1001

原创 [JNI] 开发之旅 (2)解释jni helloworld实例

在上篇文章中已经介绍完jni开发的流程,实现了一个简单的hello world实例 接下来对这个实例中出现的关键词,函数进行解释。.h头文件通过javah生成的头文件//引入jni.h文件#include "jni.h"/* Header for class com_honjane_jni_HelloJni *///如果没有定义xxx ifndef后会成对跟上define#ifndef _

2016-12-18 11:04:39 783

原创 [JNI] 开发之旅 (1)开发流程介绍

通过上一个系列对c语言的熟悉,为jni开发打下基础,接下来就正式进入jni开发。JNI概念(Java Native Interface )java本地化接口 , 可以通过JNI调用系统提供的API , 我们知道不管什么类型操作系统 , 机器最终识别的是一些二进制码。而 java和C/C++不同 , 它不会直接编译成机器码,而是编译成虚拟机可以运行的java字节码的.class文件,通过JIT技术即时

2016-12-17 23:05:37 1508

原创 [JNI] 开发基础 (8)c语言typedef

typedef 起别名,目的是为了编码方便。例如有一个结构体的名字是 stu,要想定义一个结构体变量就得这样写:struct stu stu1;struct 看起来就是多余的,但不写又会报错。如果为 struct stu 起了一个别名 STU,书写起来就简单了:STU stu1;写法更加简练,意义也非常明确,不管是在标准头文件中还是jni的编程实践中,都会大量使用这种别名。语法格式为:typedef

2016-12-11 18:54:41 608

gvr-Android-demo实例

在Google官方用例基础上,实现流媒体实例,版本0.8支持hls

2016-07-11

swipeListView优化

SwipeListView 详解 实现微信,QQ等滑动删除效果 简单快速,代码易懂,不需要带入github库

2015-12-25

SwipeListView实例源码

SwipeListView 详解 实现微信,QQ等滑动删除效果 ;blog地址http://blog.csdn.net/honjane/article/details/38404143

2015-06-18

Android自动清理无用资源

使用步骤:http://blog.csdn.net/honjane/article/details/41351183 Android自动清理资源文件,节省了你去一个文件一个文件的找引用类,和繁琐的删除工作,平常你删项目中的无用资源可能要几个小时,现在只需几秒钟时间 目前支持 图片,layout,menu 删除

2014-11-21

Android自动清理无用资源文件

Android自动清理资源文件,节省了你去一个文件一个文件的找引用类,和繁琐的删除工作,平常你删项目中的无用资源可能要几个小时,现在只需几秒钟时间 目前支持 图片,layout,menu 删除

2014-11-21

空空如也

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

TA关注的人

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