
Android
文章平均质量分 79
提辖鲁
这个作者很懒,什么都没留下…
展开
-
ndk实例总结:jni日志存储
ndk实例总结ndk实例总结:jni实例ndk实例总结:opencv图像处理ndk实例总结:安卓Camera与usbCamera原始图像处理ndk实例总结补充:使用V4L2采集usb图像分析ndk实例总结:使用fmpeg播放rtsp流前言本文是jni日志存储的实例,能够同时将jni日志打印在logcat中并且保存到日志文件内代码namespace jlog { namespace { const static size_t K_bufLen = 2048;原创 2020-11-11 15:21:22 · 795 阅读 · 0 评论 -
ndk实例总结补充:使用libuvc采集usb图像分析
ndk实例总结补充-使用libuvc采集usb图像分析ndk实例总结:jni实例ndk实例总结:opencv图像处理ndk实例总结:安卓Camera与usbCamera原始图像处理ndk实例总结补充:使用V4L2采集usb图像分析ndk实例总结:使用fmpeg播放rtsp流ndk实例总结:基于libuvc的双usbCamera处理前言本文是对ndk实例总结:基于libuvc的双usbCamera处理中jni部分的补充,主要分析下使用libuvc采集usb图像的流程libuvc介绍libu原创 2020-11-11 10:48:07 · 4768 阅读 · 2 评论 -
ndk实例总结:基于libuvc的双usbCamera处理
ndk实例总结ndk实例总结:jni实例ndk实例总结:opencv图像处理ndk实例总结:安卓Camera与usbCamera原始图像处理ndk实例总结补充:使用V4L2采集usb图像分析ndk实例总结:使用fmpeg播放rtsp流前言在Android上进行usb camera相关的开发,离不开两种方式,一种基于v4l2接口,我在ndk实例总结补充:使用V4L2采集usb图像分析中有过分析,另一种基于libuvc,github上有一个开源项目UVCCamera,但是封装的非常复杂,很难在其原创 2020-11-10 17:22:16 · 4617 阅读 · 11 评论 -
Android LruCache 原理
Android LruCache 原理LruCache是基于Least Recently Used(最近最少使用)算法实现的一个线程安全的数据缓存类,当超出设定的缓存容量时,优先淘汰最近最少使用的数据LruCache的LRU缓存策略是利用LinkedHashMap来实现的,并通过封装get/put等相关方法来实现控制缓存大小以及淘汰元素,但不支持为null的key和value因此先学习Lin...原创 2020-01-31 16:20:24 · 1401 阅读 · 0 评论 -
Android SAF存储访问框架
Android SAF存储访问框架SAF存储访问框架首先介绍下SAF存储访问框架:在Android 4.4中引入的一套存储访问框架(Storage Access Framework),借助 SAF,用户可轻松在其所有首选文档存储提供程序中浏览并打开文档、图像及其他文件。用户可通过易用的标准界面,以统一方式在所有应用和提供程序中浏览文件,以及访问最近使用的文件。我们可以通过ACTION_OPE...原创 2019-11-16 18:03:39 · 6188 阅读 · 0 评论 -
kotlin中使用AutoClosable特性进行复制文件
kotlin中使用AutoClosable特性进行复制文件java7以后提供了try with resources与AutoClosable两个特性,使得复制文件方式简洁了些:private void copyFile(String srcPath, String dstPath) { File srcFile = new File(srcPath); if (!srcFile...原创 2019-11-16 16:43:40 · 1421 阅读 · 0 评论 -
Android 监听U盘OTG挂载状态
Android 监听U盘OTG挂载状态本篇博客介绍下在Android系统中,如何监听和获取U盘OTG挂载状态在Android中插入U盘时,系统会先准备U盘并检查是否有错误,检查完成后才会把U盘挂载到系统中。因此U盘插入和检查U盘错误这个两个阶段都不能算是U盘挂载状态,我们要获取的状态是检查完成后挂载的状态,也就是USB_DISK_MOUNTED这个广播class UsbDiskReceive...原创 2019-11-16 15:00:29 · 3268 阅读 · 0 评论 -
Android 包含水波纹效果的圆角Button
drawable文件夹下新建文件button_ripple.xml,添加如下内容<?xml version="1.0" encoding="utf-8"?><ripple xmlns:android="http://schemas.android.com/apk/res/android" android:color="?attr/colorControlHighlig...原创 2019-10-18 11:06:08 · 2008 阅读 · 1 评论 -
Android 设置系统时间
Android 6.0 提供了新的date命令格式Default SET format is "MMDDhhmm[[CC]YY][.ss]", that's (2 digits each)month, day, hour (0-23), and minute. Optionally century, year, and second.因此使用adb中的date命令不能像以前一样使用-s了...原创 2019-10-17 17:13:00 · 4718 阅读 · 0 评论 -
Android中Activity、Dialog、Toast的Window创建过程
Android Window的创建过程Android中可以提供视图的地方有Activity、Dialog、Toast,除此之外还有一些依托Window而实现的视图,比如PopUpWindow、菜单,因此Activity、Dialog、Toast等视图都对应着一个Window,本篇将分析这些是土元素中的Window创建过程。Activity的Window创建过程activity的启动过程很复杂...原创 2019-09-17 20:05:18 · 1257 阅读 · 0 评论 -
Android 理解Window和WindowManager
Android 理解Window和WindowManagerWindow表示的是一个窗口的概念,它是一个抽象类,具体实现是PhoneWindow。创建一个Window只需要通过WindowManager即可完成,WindowManager是外界访问Window的入口。Window的具体实现是在WindowManagerService中,WindowManager与WindowManagerSe...原创 2019-09-05 13:34:47 · 574 阅读 · 0 评论 -
Android 属性动画工作原理
Android 属性动画工作原理属性动画要求作用的对象必须有set方法,它会根据传递的初始值和最终值以动画效果多次调用set方法,随着时间的推移,所传递的值越来越接近最终值。如果动画的时候没有传递初始值,则需要提供get方法,可以让系统获取属性的初始值。首先我们根据ObjectAnimator.onInt(mButton, "width", 500).setDuration(5000).sta...原创 2019-08-20 22:38:18 · 515 阅读 · 0 评论 -
Android View 工作原理分析
View的工作原理分析View的工作流程主要是指measure、layout、draw这三大流程,即测量、布局和绘制,其中measure确定View的测量宽/高,layout确定View的最终宽/高和四个顶点的位置,而draw则将View绘制到屏幕上。measure过程measure过程分两种,第一种是view,只需通过measure方法就可以完成测量过程。还有一种是ViewGroup,除了...原创 2019-08-20 16:18:21 · 235 阅读 · 0 评论 -
Android在Activity中获取View宽高
Android在Activity中获取View宽高在onCreate、onStart、onResume中获取不到View的宽高,因为View的measure过程和Activity的生命周期方法不是同步执行的,无法保证Activiy执行了onCreate、onStart、onResume时某个View已经完毕。因此想要在Activity中获取View的宽高需要用其他方式来解决:Activity/...原创 2019-08-18 22:39:12 · 851 阅读 · 0 评论 -
Android View 工作原理基础
View 工作原理基础本章主要介绍View的工作原理,了解了工作原理后才能作出比较完善的自定义View,View需要掌握三大流程:measure、layout和draw,除了三大流程以外,还需要掌握常见的回调方法,比如构造方法、onAttach、onVisibilityChanged、onDetach等。初识ViewRoot和DecorView了解ViewRoot和DecorView的概念有...原创 2019-08-15 13:37:56 · 285 阅读 · 0 评论 -
Android View 事件分发机制
Android View 事件分发机制点击事件传递规则在分析点击事件传递规则之前,首先要分析的对象是MotionEvent,点击事件的事件分发,其实就是对MotionEvent事件的分发过程,即当一个MotionEvent产生了以后,系统需要把这个事件传递给一个具体的View,而这个传递的过程就是分发过程。点击事件的分发过程由三个很重要的方法来完成:puhlic boolean disp...原创 2019-08-05 13:59:53 · 339 阅读 · 0 评论 -
Android View 滑动
Android View 滑动View 滑动有三种方式可以实现View的滑动:通过View本身提供的scrollTo/scrollBy方法来实现滑动通过动画给View施加平移效果来实现滑动通过改变Viev的LayoutParams使得View重新布局从而实现滑动使用scrollTo/scrollByView提供了scrollTo/scrollBy来实现滑动,实现如下:/** ...原创 2019-07-21 18:41:21 · 311 阅读 · 0 评论 -
Android View 事件基础
Android View 基础View 基础知识本节主要介绍:View的位置参数、MotionEvent和TouchSlop、VelocityTracker,GestureDetector和Scroller对象什么是ViewView是Android中所有控件的基类,是界面层的一种抽象,代表了一个控件。除了View还有ViewGroup,ViewGroup继承于View,内部是可以有子Vie...原创 2019-07-18 22:48:59 · 400 阅读 · 0 评论 -
Ubuntu16.04 编译 Dlib for Android(更新版)
Ubuntu16.04 编译 Dlib for Android(更新版)本文为https://blog.youkuaiyun.com/lj402159806/article/details/76767882的更新版编译版本OpenCV 19.17ndk-r20编译环境首先需要安装sdk tools,然后通过sdkmanager安装cmake和ndkmkdir sdk &&am...原创 2019-06-11 15:03:10 · 371 阅读 · 0 评论 -
Ubuntu16.04 编译 OpenBLAS for Android(更新版)
Ubuntu16.04 编译 OpenBLAS for Android(更新版)本文是https://blog.youkuaiyun.com/lj402159806/article/details/85691400这篇OpenBLAS编译部分的更新版编译版本openblas-0.3.6ndk-r20编译环境首先需要安装sdk tools,然后通过sdkmanager安装cmake和nd...原创 2019-06-11 14:46:52 · 1357 阅读 · 16 评论 -
Android JNI 使用assets加载dlib特征点文件shape_predictor
Android JNI 使用assets加载dlib特征点文件shape_predictor本文介绍如何在jni中加载apk的assets文件夹中的shape_predictor_68_face_landmarks.dat在NDK中,google提供了AAssetManager_fromJava来获得Native中对应的AAssetManager,使用这个api可以将assets文件的内存地址...原创 2019-05-31 11:47:27 · 1351 阅读 · 5 评论 -
android studio引用其他model的jar包
android studio项目如果存在多个model,并且想在app中调用其他model内的jar包相关类时,会提示找不到该类,让你add library到classpath中,但是操作之后没有作用出现这个问题的原因是build.gradle内使用了implement配置来导入jar包,比如implementation files('libs/test.jar')implementation...原创 2019-05-07 18:31:16 · 2751 阅读 · 2 评论 -
TextureView不回调onSurfaceTextureDestroyed的问题
TextureView不回调onSurfaceTextureDestroyed的问题在使用TextureView做为自定义view时,想要手动控制TextureView的销毁和创建但是发现将Visibility设为View.GONE不会调用onSurfaceTextureDestroyed回调测试代码如下:class TestTextureView : TextureView, Textu...原创 2019-04-19 14:33:32 · 6666 阅读 · 4 评论 -
ndk实例总结:使用ffmpeg播放rtsp流
ndk实例总结系列ndk实例总结:jni实例ndk实例总结:opencv图像处理ndk实例总结:安卓Camera与usbCamera原始图像处理ndk实例总结补充:使用V4L2采集usb图像分析前言本篇博客总结下在jni中使用opencv进行图像处理的使用实例在Android中opencv的使用有两种方式,一种是使用opencv的Android版api,另一种是通过jni来使用ope...原创 2019-03-14 19:30:21 · 2744 阅读 · 5 评论 -
ndk实例总结补充:使用V4L2采集usb图像分析
ndk实例总结补充-使用V4L2采集usb图像分析前言本文是对ndk实例总结:安卓Camera与usbCamera原始图像处理中usbCamera部分的补充,主要分析下使用V4L2采集usb图像的流程V4L2介绍v4l2是linux操作系统下用于采集图片、视频和音频数据的API接口,配合适当的视频采集设备和相应的驱动程序,可以实现图片、视频、音频等的采集。在远程会议、可视电话、视频监控系统...原创 2019-02-28 14:40:02 · 1585 阅读 · 0 评论 -
ndk实例总结:安卓Camera与usbCamera原始图像处理
ndk实例总结-安卓Camera与usbCamera原始图像处理ndk实例总结系列ndk实例总结:jni实例ndk实例总结:opencv图像处理ndk实例总结:安卓Camera与usbCamera原始图像处理前言本篇博客总结下在jni中对安卓Camera与UsbCamera的原始图像进行处理的使用实例项目构架项目构架与上一篇文章ndk实例总结:opencv图像处理类似,也同样使用...原创 2019-02-26 14:05:22 · 3390 阅读 · 0 评论 -
Ubuntu16.04 编译 OpenCV for Android(更新版)
ubuntu16.04编译opencv for Android(更新版)本文为https://blog.youkuaiyun.com/lj402159806/article/details/76762228的更新版编译版本opencv 3.4.5ndk-r18编译环境首先需要安装sdk tools,然后通过sdkmanager安装cmake和ndkmkdir sdk &amp;&am...原创 2019-01-04 15:54:47 · 2394 阅读 · 2 评论 -
ubuntu16.04 编译 openblas mxnet for Android
ubuntu16.04 编译 openblas mxnet for Android编译版本openblas-0.3.5mxnet-masterndk-r18生成工具链#将ndk目录加入环境变量export NDK_BUNDLE_DIR=${HOME}/Android/ndk/android-ndk-r18b#将toolchain目录加入环境变量export MY_ANDROID_...原创 2019-01-03 13:38:00 · 1286 阅读 · 1 评论 -
AIDL使用实例(kotlin)
AIDL使用实例(kotlin)对AIDL以及Binder机制还不太了解的建议先看这篇博客https://blog.youkuaiyun.com/lj402159806/article/details/85038382创建AIDL接口首先创建一个数据类文件和四个aidl文件public class Book implements Parcelable { public int book...原创 2018-12-19 14:08:15 · 1780 阅读 · 0 评论 -
Android中Binder与AIDL之间的关系
Android中Binder与AIDL之间的关系BinderAndroid中特有的一种进程间通信方式,一种虚拟的物理设备,设备驱动是/dev/binderAndroid中实现了IBinder接口的一个类ServiceManager连接各种Manager(ActivityManager、WindowManager等等)和相应ManagerService的桥梁应用层客户端和服务端进行通信的...原创 2018-12-16 16:49:12 · 3182 阅读 · 0 评论 -
Android性能优化
Android性能优化布局优化布局优化可以通过HierarcheyViewer可以直接看到冗余的层级,然后尽量减少视图树层级并使用下面的常用布局优化方式进行优化布局优化遵循以下原则:尽量多使用相对布局(RelativeLayout)或约束布局(ConstraintLayout)在List组件中尽量避免使用LinearLayout的layout_weight属性将可复用组件抽取出来并通...原创 2018-11-21 14:05:16 · 275 阅读 · 0 评论 -
SQLite数据库
SQLite数据库SQLite3基本介绍SQLite是一个遵守ACID(原子性、一致性、隔离性和持久性)的关系型数据库。SQLite不像常见的客户端\服务端结构的数据库,它将整个数据库作为一个单独的、可跨平台使用的文件存储在主机中。采用了写入数据将整个数据库文件加锁的简单设计,写操作只能串行进行,但是读操作可以多任务同时进行。SQLite实现了多数SQL-92标准,但却失了某些特性比如仅部分...原创 2018-10-21 22:09:08 · 8375 阅读 · 0 评论 -
Java多线程:多线程基础
多线程基础多线程实现-Thread和Runnable通常使用如下代码启动一个新的线程:private void startNewThread1() { new Thread() { @Override public void run() { //耗时操作,此时target为空 } }.start();}...原创 2018-10-07 12:47:28 · 7441 阅读 · 1 评论 -
Android 消息机制 Handler、Looper与MessageQueue
Android 消息机制Android的消息机制主要指Handler的运行机制,Handler的运行需要底层的MessageQueue和Looper支撑MessageQueue就是消息队列,它内部存储了一组消息,以队列的形式对外提供插入和删除的工作,但内部存储结构不是真正的队列,而是采用单链表的数据结构来存储消息列表Looper就是消息循环,它会以无限循环的形式去查找是否有新消息,有的话就处...原创 2018-10-05 22:34:56 · 307 阅读 · 0 评论 -
EditText与软键盘使用记录
点击EditText之外的区域,隐藏软键盘在父布局与其他控件中加入如下标签android:clickable="true"android:focusableInTouchMode="true"android:focusable="true"设置OnFocusChange监听,focus改变后隐藏软键盘mEditText.setOnFocusChangeListener(...原创 2018-05-08 14:11:25 · 408 阅读 · 1 评论 -
Android 使用USB与PC通信之ADB方式
Android 使用USB与PC通信之ADB方式之前介绍过一篇使用UsbAccessary模式来与pc通信的文章点击链接本篇文章介绍使用adb来进行与pc端的usb通信首先必须确保手机要打开开发者模式android端建立socket服务端,监听10010端口 try { // 实例化ServerSocket对象并设置端口号为 10010...原创 2018-04-14 17:05:51 · 9244 阅读 · 0 评论 -
基于MVP构架的Socket项目
Android中基于MVP构架的Socket实例MVP构架简介Android中的MVP构架主要就是对原先MVC中Controller层臃肿的代码进行提取抽象,实际上就是将Activity当中的UI逻辑,业务逻辑与数据进行隔离,因此分为了三个层次;View: 视图层,在View层中只负责对数据的展示,在Android开发中通常将Activity或者Fragment作为View层;...原创 2018-03-11 16:08:38 · 2711 阅读 · 2 评论 -
Socket通信完整实例(心跳包,客户端断线重连,服务端超时断开客户端连接)
Socket通信完整实例(心跳包,客户端断线重连,服务端超时断开客户端连接)通用工具类public class SocketUtil { public static String ADDRESS = &quot;192.168.1.123&quot;; public static int PORT = 10086; /** * 读数据 * * ...原创 2018-02-25 21:05:27 · 40729 阅读 · 20 评论 -
Java 多线程:线程池
Java 线程池:ThreadPoolExecutor线程池当需要频繁的创建多个线程进行耗时操作时,频繁创建和销毁线程对象性能较差,并且缺乏统一管理,可能会无限制创建线程,导致相互竞争资源导致死锁,因此使用线程池就可以创建多个线程并且进行管理,提交的任务会被线程池指派给其中的线程进行执行,通过线程池的统一调度和管理使得多线程的使用更简单高效。线程池的优点重用线程池中的线程,避免因为线程的创建和销毁原创 2018-02-25 16:29:09 · 878 阅读 · 0 评论 -
Android串口通信
Android串口通信前言Android需要与下位机通信的情况下,如果对传输速率要求不高的话,串口通信是很可靠且最常用的一种方案分析官方提供了一个开源项目(android-serialport-api)提供了串口使用的方法,但是并不能直接使用,需要集成到自己的项目中,下面来分析下怎么使用串口串口使用和一般的硬件设备一样,无外乎四个步骤:1.打开串口(及配置串口)原创 2018-01-20 15:50:36 · 1300 阅读 · 0 评论