Android系统--输入系统(十五)实战_使用GlobalKey一键启动程序 1. 一键启动的过程 1.1 对于global key, 系统会根据global_keys.xml发送消息给某个组件 <key keyCode="KEYCODE_TV" component="com.thisway.app_0001_leddemo/.MyBroadcastReceiver" /> 1.2 APP应该注册广播消息的接收者 1.2.1 编写BroadcastRe…
11. 实战_使用GlobalKey一键启动程序参考文章:Android 两种注册(动态注册和静态注册).发送广播的区别http://www.jianshu.com/p/ea5e233d9f43 [Android]动态注册广播接收器 http://blog.csdn.net/etzmico/article/details/7317528 Android初学习 - 在BroadcastReceiver中启动Activity的问题 http://blog.csdn.net/cnmilan/artic…
Android系统--输入系统(十)Reader线程_核心类及配置文件深入分析 0. 前言 个人认为该知识点阅读Android源代码会不仅容易走进死胡同,并且效果并不好,前脚看完后脚忘记,故进行总结,希望可以更好帮助大家了解,了解之后在进行阅读源代码会有事半功倍的效果. 1. 引入 由输入系统(九)实验得出 keylayout文件:只是用来表示驱动上报的scancode对应哪一个android按键(AKEYCODE_x)只是表示按键被按下. kcm文件: 用来表示android按键(AKEYCO…
Android系统--输入系统(十二)Dispatch线程_总体框架 1. Dispatch线程框架 我们知道Dispatch线程是分发之意,那么便可以引入两个问题:1. 发什么;2. 发给谁.这两个问题便是构成Dispatch线程的主要两个部分,也是今天博文主要讨论的问题,本次只是简单介绍框架,具体介绍会在后续博文具体说明. 2. Dispatch线程分发过程 2.1 针对发什么? 首先需获得事件: (1)简单处理 进行输入事件分类(Global按键.system按键.用户按键) 处理紧急事件…
Android系统--输入系统(五)输入系统框架 1. Android设备使用场景: 假设一个Android平板,APP功能.系统功能(开机关机.调节音量).外接设备功能(键盘.触摸屏.USB外接键盘/鼠标). 2. 引入输入系统: (1)触摸屏控制APP (2)外接设备控制系统功能 3. 输入系统三部分 读取事件 分发事件 处理事件 4. 读取事件分析 4.1 读取支持功能 支持多设备 GPIO键盘 遥控器 外接USB键盘鼠标 触摸屏 即插即用:可以随时接入或者拨出 支持多语言(映射):同一个…
Android系统--输入系统(八)Reader线程_使用EventHub读取事件 1. Reader线程工作流程 获得事件 size_t count = mEventHub->getEvents(timeoutMillis, mEventBuffer, EVENT_BUFFER_SIZE); 简单处理 processEventsLocked(mEventBuffer, count); 将事件分发给Dispatch线程处理 mQueuedListener->flush(); 2. Reader…
Android系统--输入系统(九)Reader线程_核心类及配置文件 1. Reader线程核心类--EventHub 1.1 Reader线程核心结构体 实例化对象:mEventHub--表示多个输入设备,里面有数组mPendingEventItems存储多个设备 struct epoll_event mPendingEventItems[EPOLL_MAX_EVENTS]; mDevice--vector,用来表示记录多个输入设备 KeyedVector<int32_t, Device*>…
Android系统--输入系统(十一)Reader线程_简单处理 1. 引入 Reader线程主要负责三件事情 获得输入事件 简单处理 上传给Dispatch线程 InputReader.cpp void InputReader::loopOnce() { ...... size_t count = mEventHub->getEvents(timeoutMillis, mEventBuffer, EVENT_BUFFER_SIZE); //获得事件 { // acquire lock Auto…
Android系统--输入系统(十四)Dispatcher线程情景分析_dispatch前处理 1. 回顾 我们知道Android输入系统是Reader线程通过驱动程序得到上报的输入事件,还要经过处理,才可以将输入事件发送给应用程序,现在回顾一下是具体做哪些处理. 首先Reader线程会将输入事件放入mInboundQueue队列当中,但是放入队列之前需要进行稍加处理. 1.1 处理类型 - 紧急事件,马上处理(来电振铃时,按下音量键,会马上静音) - 对输入事件添加Flag,决定输入事件是否传…
Android系统--输入系统(十六)APP跟输入系统建立联系_InputChannel和Connection 0. 核心:socketpair机制 1. 回顾Dispatch处理过程: 1.1 放入队列前稍加处理 分类:Global Key/System Key/User Key 处理紧急事件(比如来电的时候按下音量键静音) 1.2 InputReader线程将读到的输入事件稍加处理后放入mInboundQueue队列中,接着唤醒Dispatch线程 1.3 Dispatch从mInbound…
Android系统--输入系统(十七)Dispatcher线程_分发dispatch 1. 回顾 InputRead线程从输入设备当中得到输入事件 对于读到输入事件稍作处理,比如紧急事件,来电时候按下音量键便是静音,这时候是直接处理的,处理之后再把输入事件放入mInBoundQueue队列当中,接着唤醒Dispatch线程. 对于Dispatch线程也是对输入事件稍作处理之后,再给分发给应用程序 Global Key/System Key:处理之后直接丢掉 User Key:上传给应用程序:通过…
Android系统--输入系统(三)必备Linux知识_双向通信(scoketpair) 引入 1. 进程和APP通信 创建进程 读取.分发 - 进程发送输入事件给APP 进程读取APP回应的事件 输入系统涉及双向的进程间通信 2. 回顾Binder系统 Server-- 单向发出请求 Client -- 单向回复请求 每次请求只可以单方发出 3. 引入Socketpair 原因:如果创建两组进程(Client,Server)进行双向通信,实现十分复杂 引入Socketpair: Socketp…
Android系统--输入系统(二)必备Linux知识_实现inotify_epoll.c 课后作业 1. 编写 inotify_epoll.c, 用它来监测tmp/目录: 有文件被创建/删除, 有文件可读出数据 a. 当在tmp/下创建文件时, 会立刻监测到,并且使用epoll监测该文件 b. 当文件有数据时,读出数据 c. 当tmp/下文件被删除时,会立刻监测到,并且把它从epoll中移除不再监测 2. 程序基本框架 (1)初始化--初始化epoll和inotify,获取其fd (2)添加事…
Android系统--输入系统(六)模拟输入驱动程序 1. 回顾输入子系统 简单字符设备驱动:应用程序通过调用驱动所实现的函数使能硬件. 输入子系统:由于有多个应用程序使用输入子系统,故肯定使用的是早已规定好驱动接口,我们所需要实现的这是实现硬件相关的操作. 2. 输入子系统特性 有多套open/read/write接口 当应用程序调用这些接口,驱动程序将提供多套实现方法 evdev.c(evdev_open/evdev_read/evdev_write),通过这些接口提供原始数据 keyboa…
Android系统--输入系统(七)Reader_Dispatcher线程启动分析 1. Reader/Dispatcher的引入 对于输入系统来说,将会创建两个线程: Reader线程(读取事件) Dispatcher线程(分发事件) 2. Reader/Dispatcher的创建 我们知道在Android系统中,都普遍按照面向对象的思想来编写程序,对于问题,Android一般都是创建一个类去解决,在输入系统中,有两个线程,对于这两个线程,Android系统为这两个线程创建两个类,分别为Inp…
Android系统--输入系统(十三)Dispatcher线程情景分析_Reader线程传递事件 1. 输入按键 我们知道Android系统的按键分为三类:(1)Global Key;(2)System Key;(3)User Key Global Key:按下一个按键,启动某个APP. 具体使用哪个按键启动哪个APP可以自己指定,修改\frameworks\base\core\res\res\xml\Global_keys.xml,接下来有一篇博文具实现,假设它是AKEYCODE_TV Sys…
Android系统--输入系统(一)必备的Linux知识_inotify和epoll 引入 1. 笔记本电脑插入外接键盘,两个键盘都可以使用 a. 键盘即插即用--如何检测键盘的接入和拔出 hotplug机制:内核发现键盘接入或拨出之后启动hotplug进程,进程发出信号告诉输入系统,输入系统处理 inotify机制:输入系统使用inotify检测/dev/input的节点变化 b. 可用使用多键盘--如何知道哪个键盘被按下 epoll机制:可以检测多个事件 c. 如何使用inotify和epo…
   Android用户事件输入路径 1 输入路径的一般原理 按键,鼠标消息从收集到最终将发送到焦点窗口,要经历怎样的路径,是Android GWES设计方案中需要详细考虑的问题.按键,鼠标等用户消息消息的处理可分为不同的情况进行判定: (1)用户输入根据系统状况是否应该派送.如在ScreenOff的情况下,在按键属于特殊按键的情况下等 (2)是否有拦截Listener (3)对按键事件来讲,是否存在输入法 (4)是否是焦点终点 (5)是否为焦点切换按相关键 这些情况都是设计输入路径需要考虑的基…
简介 RecyclerView是我们开发过程中经常使用到的一个元素,原生的RecyclerView.Adapter基本上可以满足一般的需求,关于RecyclerView的基础介绍请移步: RecyclerView基础使用 关于多类型的Item,原生的Adapter可以通过getItemViewType返回对应的ViewHolder类型,然后在onCreateViewHolder传入的type参数,生成不同的ViewHolder,更要命的是数据绑定过程中onBindViewHolder只传入Vie…
我们在前一篇文章中实现了cas4.2.x登录使用mongodb验证方式. 单点登录(十三)-----实战-----cas4.2.X登录启用mongodb验证方式完整流程 也学习参考了cas5.0.x版本的mongodb的四种加密方式. 单点登录(十四)-----实战-----cas5.0.x登录mongodb验证方式常规的四种加密的思考和分析 结合到cas 4.2.x的代码情况我们发现需要修改MongoAuthenticationHandler.java部分的代码才可以实现自定义加密. 主要思路…
//此系列博文是<第一行Android代码>的学习笔记,如有错漏,欢迎指正! 实现强制下线功能的思路也比较简单,只需要在界面上弹出一个对话框, 让用户无法进行任何其他操作, 必须要点击对话框中的确定按钮,然后回到登录界面即可.我们被通知需要强制下线时可能正处于任何一个界面, 但我们不需要在每个界面上都编写一个弹出对话框的逻辑,可以使用广播来轻松地实现这一功能. 一.创建一个 ActivityCollector 类用于管理所有的活动: public class ActivityCollector…
前言 本节开始整理日志相关的东西.先整理一下日志的基本原理. 正文 首先介绍一下包: Microsoft.Extengsion.Logging.Abstrations 这个是接口包. Microsoft.Extengsion.Logging 这个是实现包 Microsoft.Extengsion.Logging.Console 这个是扩展包 代码如下: static void Main(string[] args) { IConfigurationBuilder configurationBui…
Xamarin.Android学习之应用程序首选项 一.前言 任何App都会存在设置界面,如果开发者利用普通控件并绑定监听事件保存设置,这 一过程会非常的枯燥,而且耗时.我们可以看到Android系统的设置界面里面的选项如此之多,是不是都是这样开发的呢?其实不然,Android已经给 我们提供了专门设计这一功能的技术,叫应用程序首选项,今天我们将学习如何使用他们来开发配置界面以及功能. 二.准备工作 首先需要理解的就是我们设置界面还是需要控件的,但是我们所使用的控件不在是普通的控件,下面我们来简…
简述Android项目中android.jar文件里包含较为重要的15个系统编译后的class文件 android.app:提供高层的程序模型,提供基本的运行环境android.content:包含各种对设备上的数据进行访问和发布的类android.database:通过内容提供者浏览和操作数据库android.graphics:底层的图形库,包含画布,颜色过滤.点.矩形,可以将他们直接绘制到屏幕上android.location:定位相关服务的类android.media:提供一些类管理多种音…
一.Notification基本概念  Notification是一种具有全局效果的通知,它展示在屏幕的顶端,首先会表现为一个图标的形式,当用户向下滑动的时候,展示出通知具体的内容.我们在用手机的时候,如果来了短信,而我们没有点击查看的话,在手机的最上边的状态栏里有一个短信的小图标提示,这个提示效果就是用Notification来做. 二.Notification的基本使用流程 状态通知栏主要涉及到2个类:Notification 和NotificationManager Notificatio…
源码地址https://github.com/979451341/Rtmp 1.配置RTMP服务器 这个我不多说贴两个博客分别是在mac和windows环境上的,大家跟着弄 MAC搭建RTMP服务器https://www.jianshu.com/p/6fcec3b9d644这个是在windows上的,RTMP服务器搭建(crtmpserver和nginx) https://www.jianshu.com/p/c71cc39f72ec 2.关于推流输出的ip地址我好好说说 我这里是手机开启热点,电…
目录(?)[-] 基础Button ImageButton ToggleButton CheckBox RadioButton 基础Button Button是最常用的基础控件之一,在Android中是TextView的继承类.在上面衍生ImageButton和ToggleButton,我们将逐一介绍.小例子如图.基础Button我们将主要介绍按键触发的方式.代码如下: Button bt = (Button)findViewById(R.id.ui_button1); bt.setOnClic…
AsyncTask<Params,Progress,Result> 是一个抽象类,通常继承这个抽象类需要指定如下几个泛型参数: 1.  Params :启动任务时出入参数的类型 2.  Progress :后台任务执行中返回进度值的类型 3.  Result :后台执行任务完成后返回结果的类型 构建AsyncTask子类必须重现的方法: 1.  doInBackGround() :必须重写,这个方法用来写异步执行后台线程将要完成的任务. 2.  onPreExcute() :该方法在后台耗时操…
之前接触了ListView和Adapter,Adapter将数据源和View连接起来,实际应用中,我们要显示的数据往往有很多,而屏幕只有那么大,系统只能屏幕所能显示的内容,当我们滑动屏幕,会将旧的内容放入到缓冲池中,再从缓存池中拿出新的内容显示出来,这就是ListView的缓存机制,这一机制可以极大的节省系统资源. BaseAdapter BaseAdapter通常用于被扩展,扩展BaseAdapter可以对各项列表进行最大限度的定制. 我们可以用自己的类去继承BaseAdapter,然后实现g…
设置头像: Drawable drawable = new BitmapDrawable(dBitmap); //Drawable drawable = Drawable.createFromPath(path): avator.setBackgroundDrawable(drawable); String filepath = "/sdcard/paiyipai.jpg"; Bitmap bm = BitmapFactory.decodeFile(filepath); //Btima…