自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(56)
  • 资源 (5)
  • 收藏
  • 关注

原创 Android Camera

预览。使用PreviewView,它是一种支持裁剪、缩放和旋转的view,相机处于活动状态时,图片预览会流式传输到它的surface。图片拍摄。提供自动白平衡、曝光、延迟、闪光灯和对焦等功能,支持把图片放到内存缓存区和写文件。图像分析。应用会对每个帧运行analyze()方法,可以进行图像处理、视觉或机器学习。可以通过设置阻塞和非阻塞的模式处理分析流水线无法满足CameraX帧率要求。视频拍摄。录制视频流和音频流,对其压缩合并后写入磁盘。CameraX不是本文重点此处不做详细介绍。

2023-12-29 22:20:14 1474

原创 ByteBuffer.allocateDirect()创建的对象offset默认不为0

这个时候数据position为0,两种实现看起来没有区别,但是当我调试时发现ByteBuffer中存储数据的数组中(byteBuffer.array())的数据前四个字节为0,这也解释通了为什么保存的图片前面数据为0了,但是第二种方法为什么取到的值从第五位开始了呢?接下来我们继续看这个偏移是怎么来的,我这里的ByteBuffer对象是自己创建出来的空对象,用来拷贝相机回调的数据,我惊奇的发现创建出来的一个空对象offset里面的值竟然就是4。

2023-12-27 20:54:43 392

原创 衡器关于检定分度值e和实际分度值d的一点认识

就是称能显示的最小刻度或最小能显示的值跨度,可以理解为可读精度,例如电子秤15克的下一个指示值为20克,再下一个值为25克,那么这个称的实际分度值(d)为5克。而另外一个称15克的下一个指示值为16克,那么这个称的实际分度值(d)为1克。这里要注意的是d为1克的称并不代表比d为5克的称准确。第二个称虽然可以显示到1克,但不代表这个值是准确的啊,可能你放了24克的东西第二个称显示33克,但是第一个称显示25克。而e和d当关系通常厂商可以制定的,例如e=2d或e=10d。

2023-07-26 17:43:52 2254

原创 Android无法打开开发者模式

Android10的系统,一台设备无法通过点击设备版本打开开发者模式,通过正常设备点击时的文案"You are now a developer!这个函数很长,分析源码可以发现有很多条件可以触发函数返回,针对我的情况,通过debug发现是Utils.isDeviceProvisioned(mContext)没有满足,跟进去可以看到时一个设置项被改变了。因为拆设备通过usb线连接了设备,并且设备可以识别出来,所以可以直接通过adb 命令修改此参数。如果连接不上usb线,可以写一个APP通过代码修改此设置。

2023-03-22 14:39:09 744

原创 Android网络框架

同样的,我们可以发现WifiManager对象的创建也是再这个类里面,在一个static代码段里面运行了下面这段代码,即在类被加载到时就创建了WifiManager并且注册到了上面的map中,我们可以看到在WifiManger创建时把WifiService的引用传了进去,实际上用户调用WifiManger时,所有对WIFI的操作都是走到了WifiService(WifiServiceImpl)。上面的回调的消息会在WifiManager的内部类ServiceHandler中收到并处理。

2023-03-13 00:12:15 355

原创 Android下拉框WIFI图标更新

这个值的含义可以理解为当前的网络的数据传输类型是不是本类型(以太网、WIFI、蜂窝)。inetCondition的赋值是在updateConnectivity()函数中实现的,通过代码可以得知只要服务端(ConnectivityService)返回的当前网络类型等于以太网或WIFI,此类型的inetCondition就为true,但是蜂窝网络不一样,返回类型类型如果不对,但是当前状态不是默认时也会赋值为true(不为默认的含义?在Android10上面inetCondition为false时的图标为。

2023-03-07 15:59:16 337

原创 RK3399 Android10 移除应用权限(包含USB)申请弹框

修改framework,指定的app不需要弹框申请权限

2022-11-30 16:18:24 1268

原创 Android源码编译备忘

主要是编译环境配置,1、我本来JAVA环境是配置好的,所以这一步可以跳过了2、终端运行 . build/envsetup.sh3、终端运行 lunch 提示找不到xcode.app的目录,我理解应该只需要安装依赖xcode tool就行了,但没找到相关资料我直接安装了xcode4、终端运行 lunch 提示需要在bash下执行,我默认使用的zsh,切换到bash终端执行,提示 /bin/bash: python: command not found,安装python3后在.bash_profile对pyth

2022-06-14 00:20:37 294

原创 Android源码下载

最近想下载Android源码学习,发现由于墙的原因直接从官网下载比较麻烦,后面找到了清华的镜像完成了下载

2022-06-05 23:40:32 428

原创 Android架构组件之ViewModel和LiveData

关于应用架构,Google官方现在主推MVVM架构,官方推出的JetPack库提供了一系类支持MVVM架构,其中最核心的两个类是ViewModel和LiveData。在MVVM架构中,View通常指Activity和Fragment,主要用来根据数据渲染UI,而Model主要负责数据的获取,这里通常包含获取网络数据和本地缓存数据,而ViewModel作为View和Model的桥梁,主要负责UI数据的处理,官方提供了ViewModel类作为一种实现。LiveData作为一种可观察的数据存储类,可以很好在支

2022-04-03 00:23:14 3706

原创 leakcanary原理分析

1、无代码集成原理目前最新版本是2.8.1,看文档从2.0版本集成时就不需要修改任何代码了,只需要在build.gradle里面添加一行引用:debugImplementation 'com.squareup.leakcanary:leakcanary-android:2.xxxx'debugImplementation保证了只在debug环境引入,关于初始化,我们在源码中看到在AndroidManifest.xml中配置了一个provider: <provider

2022-03-13 17:03:24 3495

原创 Android WebView与H5交互汇总

目前APP中内嵌Web页面非常常见,为了Web网页可以和原生进行交互,需要设计一套js-bridge,而这个桥接的设计底层都还是依赖系统提供的Webview与H5的交互,现有交互方式汇总如下:1、原生调用JS原生调用JS即在原生代码中调用执行当前网页中js代码,现有两种方法1)WebView#loadUrl("javascript:func('" + arg + "')")2) WebView#evaluateJavascript(String script, @Nullable Value

2022-03-13 16:20:20 7298

原创 React Hooks相关

一、React在16.8推出了Hooks特性,React Native是在0.59版本开始支持,官方解释了推出Hooks的原因(官方文档):1、组件间状态逻辑难以复用。之前通常使用高阶组件来解决这种问题,但是这种方式通常需要改变你的组件结构,并且会导致组件嵌套地域,导致代码难以追踪。使用Hooks可以从组件中抽取状态逻辑,可以单独测试,也可以复用。Hooks可以让你在不改变组件结构的情况下实现状态逻辑复用(Hooks allow you to reuse stateful logic without .

2022-01-14 16:28:13 235

原创 Kotlin协程简介

1. 什么是协程关于协程的定义有很多,在Kotlin语言中,协程比较合理的定义应该是一个线程框架(扔物线)或者说是一种并发设计模式(官方)。它是由官方设计的一套API方便开发者进行多线程开发。2. 协程能干什么协程主要用途总结下来就是可以用更优雅的代码实现多线程代码。主要体现在可以用同步的方式完成原来需要异步加回调才能完成的工作。举个简单例子,从服务器获取用户信息然后显示出来,常规写法如下: api.sendRequest(object : Callback { .

2021-10-06 00:10:53 1909

原创 解决滑动冲突

ScrollView中的View是可以点击的,但是又能拖动滑动,可以推测首先事件是传递到子View的,但是滑动事件被ScrollView拦截了,翻看源码可以证实此推测 @Override public boolean onInterceptTouchEvent(MotionEvent ev) { final int action = ev.getAction(); if ((action == MotionEvent.ACTION_MOVE) &&am

2021-09-20 22:18:20 326

原创 Android事件分发

1. 当手触摸屏幕,会产生一个事件,此事件由PhoneWindow的DecorView处理,它首先会调用当前Activity的dispatchTouchEvent,如果Activity不处理,事件会交由 DecorView去派发给子view去处理,如果子view不处理,则会调用activity的onTouchEvent事件。2. 当事件被交给ViewGroup处理时,会调用dispatchTouchEvent()方法,它首先调用onInterceptTouchEvent()看当前ViewGroup是否要

2021-09-20 13:18:27 91

原创 一个简单的Android Native(C/C++)网络数据加密方案

网路数据安全思考见过一些系统和应用在裸奔,也见过一些简单的应用设计了极其复杂的安全机制,不仅团队成员很难掌握,而且还影响到业务开发。所以我经常会想,什么样的网络请求才是合理的? 1. 一个APP或者网站,怎么区分当前用户是谁呢?我可以在请求参数里附带UserID,通过UserID我可以知道返回什么样的数据或者展示什么样的内容。这时只要我在请求时修改一下UserID,就能看到其他用户的信息了,别笑,

2017-05-04 11:03:02 4044 4

原创 一行代码搞定Android 6.0动态权限申请

从Android 6.0(API 23)开始,对系统权限做了很大的改变。这里介绍了授权机制和一个封装库-- PermissionGrantor,可以通过一行代码搞定动态权限申请。

2017-02-15 10:37:22 36440 7

原创 Gradle In Action

前言从2013年Google推出Android Studio(后面以AS简称)开始,到现在已经历经3年,版本也发展到了2.x版本,目前Android开发者基本上已经没有再用Eclipse开发的了。从Eclipse切换到AS,项目组织结构和环境变动很大,不过上手AS还是很简单的,新建一个项目,选择API版本,选择一个默认的空Activity,然后点击确定一个项目就创建好了,直接点击运行就可以把项目运行

2017-01-23 17:03:59 1327

原创 Android修改keystore文件用来调试微信SDK

很早在用的方法了,把正式的keystore做成一个假的debug.keystore,替换系统默认的debug.keystore。写这里备忘一下吧。1、修改keystore密码为android: keytool -storepasswd -keystore  [path]/your.keystore2、修改别名密码为android:keytool -key

2016-03-17 14:52:26 2259

原创 Android Design Support Library实践之Snackbar

Google在2014年发布了Material Design语言,紧接着第二年发布了官方support包,可以支持在低版本上手机使用这些控件。但是这么长时间过去了,国内主流app几乎都没有遵循这种规范,原因也很好理解了,这篇文章分析的比较到位(http://www.leiphone.com/news/201512/zJq6fwytkjssHEig.html?UpdatedPage=aGlqYWNr

2016-01-20 20:07:07 1608

原创 Android手机录屏并制作Gif

做效果展示时经常需要一些Gif图来显示动态效果,我目前使用的方法是手机录屏生成视频文件,再通过第三方软件用视频文件生成动图。刚才制作了一个动图效果图如下:这里我使用的是adb的screenrecord命令,它是API Level 19以上才支持的,官方文档原文如下: The screenrecord command is a shell utility for recording the dis

2016-01-20 15:47:39 8749 3

原创 关于设备唯一标识

首先结论是令人失望的,对于android来说,这是一个没有完美方案的问题。大家只能努力提高它的准确性,对于大的公司来说,可以自己开发出一套自己的机制,例如我上家公司成立过一个手机指纹的项目,专门处理设备唯一性的问题防止用户刷单,原来很简单,就是尽可能的把手机能读取到的信息获取到上传到后台,甚至令人发指的连当前电量都上传了,然后后台动态调整算法得出结论。如果目前对设备唯一标志敏感度不高,可以参考友盟

2015-05-06 11:19:24 12738

原创 Objective-C 中singleton(单例模式)的实现

OC中的单例很有意思,因为

2014-09-25 22:26:57 5364

原创 IOS响应式编程框架ReactiveCocoa(RAC)使用示例

ReactiveCocoa是响应式编程(FRP)在IOS中实现的一套

2014-09-11 01:04:49 82252 1

原创 NSInteger VS int

常能看到有人说苹果g

2014-08-25 18:15:58 2406

原创 UIButton中setTitleEdgeInsets和setImageEdgeInsets的使用

UIButton内有两个控件titleLabel和imageView,可以用来显示一个文本和图片,这里的

2014-07-15 14:52:17 67369 9

原创 UTF-8编码简介

因为最近做字符处理时,常用到编码

2014-07-14 13:59:27 1025

原创 Xcode 调试常用技巧

做IOS有一段时间了,把这段时间用到和学到的一些调试技巧大致罗列一下:一、异常断点作用:可以定位到导致程序异常崩溃的那行代码。好处:一些类在不满足条件时(如数组越界),会抛出异常导致程序崩溃,可在Log中只能显示异常类型和调用栈的内存地址,很难定位到导致异常的具体代码,而通过添加异常断点,可以在程序崩溃时,定位到导致崩溃的异常所在的那行代码。使用方法:在XCode左边视图中

2013-12-13 15:05:58 1393

原创 Android自定义拖拉窗控件

在项目中有这样一个需求,一张全屏的地图,上面覆盖一个窗口显示路线列表,而这个窗口是个拖拉窗,可以全屏,半屏,和不显示,这个跟IOS7和android中的消息栏有点像,只不过可以拖到中间。Android中有一个SlidingDrawer控件,但无法满足上面说的三个状态,自己就写了一个,把demo简单介绍一下。    实现原理还是比较简单,一个FrameLayout做容器,里面直接显示地图,然

2013-12-11 14:26:00 2531

原创 Object-C @property 小结

OC像iphone手机一样与众不同,虽然有很多优秀的地方,对于刚接触的人还是有很多不适应。自己刚做iphone开发时,最困惑的就是属性这块,现在把自己理解的做下小结:

2013-09-23 13:36:42 17261 2

原创 Android View 绘制过程解析

学习过window编程的人都知道,在屏幕上绘制视图控件很原理很简单,指定屏幕上一块区域,在里面去绘制你想要的内容,其他的系统实现原理也大同小异,但真正实现起来,还是相当复杂的。这几天看了下Android 的View的代码,觉得里面内容还是相当多的,把自己理解学习的再此罗列一下,大家共同交流学习。    屏幕的绘制可以理解为由类ViewRoot(4.0版本以前)或ViewRootImpl(4.0

2013-06-23 15:56:17 1202

原创 Mac上安装Protocol Buffers

1.下载文件 (http://code.google.com/p/protobuf/ )并解压到本地文件夹。2.确认安装过GCC(可以在终端下输入gcc  - -version 测试).如果电脑上没有安装过GCC的话,你在下面步骤中会看到提示"$PATH路径中没有C编译器"(原话不记得怎么写的了,就是这个意思)。通常做开发的MAC上都装过Xcode,很多人都说装过Xcode默认都有GCC,但我

2012-11-19 10:53:27 19310 1

转载 WWDC2012:Objective-C的新特性

1、方法顺序无关Objective-C类由声明文件h和实现文件m组成,所有的public方法都在h文件中声明,private方法可以写在m文件中,但是在早期的编译环境中需要注意方法的顺序,例如下面的代码,在早期的编译环境会给出警告:类和方法声明:@interface ObjcNewFeatures : NSObject-(void)doSomething:(NSString

2012-11-05 20:52:40 1238

原创 Android显示图片避免OOM和ANR小结

看完了文档里关于图片介绍的几篇文章,结合项目和一些网上的文章,谈下在android平台显示图片的一些个人想法。1.从设计角度,最好不要让手机显示大于手机屏幕数倍的大图片,如果源图是个大图,加载时把图片缩小到屏幕大小,使用在decode图片时使用option选项,直接加载缩小后的图片。网上不少人说先读取图片InputStream流,再通过BitmapFactory.decodeStrea

2012-10-30 13:12:14 7428 1

原创 把android.jar 和 android-support-v4.jar源文件引入工程

做Android开发时,有时避免不了要查看源码,为了确定问题所在,经常需要跟踪调试代码到源代码,这就需要你把源代码引入工程。如果想查看Activity.java代码,默认会看到如下页面:一、如果想查看到android.jar的源文件,有两种方法:1是直接为android.jar附加源代码。可以点上面的“Attach Source..."按钮,指向android sdk中的源码文

2012-10-23 21:08:47 9834 1

转载 Android中高效的显示图片之三——缓存图片

加载一张图片到UI相对比较简单,如果一次要加载一组图片,就会变得麻烦很多。像ListView,GridView,ViewPager等控件,需要显示的图片和将要显示的图片数量可能会很大。    为了减少内存使用,这类控件都重复利用移出屏幕的子视图,如果你没有持用引用,垃圾回收器也会回收你加载过的图片。这种做法很好,但是如果想要图片加载快速流畅且不想当控件拖回来时重新运算获取加载过的图片,通常会使

2012-10-22 20:47:04 5688

翻译 Android中高效的显示图片之二——在非UI线程中处理图片

在“加载大图”文章中提到的BitmapFactory.decode*方法,如果源数据是在磁盘、网络或其它任何不是在内存中的位置,那么它都不应该在UI线程中执行。因为它的加载时间不可预测且依赖于一系列因素(磁盘读写速度、图片大小、CPU频率等)。如果在主线程中执行这个操作,一旦它阻塞了主线程,就会导致系统ANR。本节介绍使用AsyncTask在后台处理图片和演示怎么处理并发问题。一、使用一个As

2012-10-21 01:22:16 4032 1

转载 理解Object-C中字符串

在Objective-C中我们常常会用到常量字符串,常量字符串和一般的字符串还是有一定区别,本文将介绍一些常量字符串的特性,加强你的常量字符串的认识。请看下面一段代码。12345NSString*string1 = @"Hello";NSString*string2 = @"Hello";

2012-10-15 12:43:25 1676

转载 获取window状态栏和标题栏的高度

1.获取状态栏高度: decorView是window中的最顶层view,可以从window中获取到decorView,然后decorView有个getWindowVisibleDisplayFrame方法可以获取到程序显示的区域,包括标题栏,但不包括状态栏。于是,我们就可以算出状态栏的高度了。 [java] view plaincopy

2012-10-09 12:10:32 1517

test.release

only for my test

2017-06-12

java处理excel

刚才写了,结果上传失败,不写了。。 java 处理excel的一个上具,去处两个文档中相同的数据。

2013-05-15

eclipse插件easy explore

可以在eclipse下方便查看一个文件的位置(即在文件中或finder中打开一个类),直接拷到eclipse目录的plugin目录下即可。

2013-01-08

android-support-v4.jar已打包进去源代码

android-support-v4.jar默认不能为它指定源代码,查看或调试时很不方便,我重新打了下包,把源代码打了进去,可以直接查看和调试。

2012-10-23

仿大众点评源码

自己写的仿大众点评的代码,反编译了大众点评的程序,用了它的部分资源和布局代码。数据是本地Mock的。个人学习用的,没有连SERVER。很适合学习用。

2012-04-17

空空如也

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

TA关注的人

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