自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

刘信的博客

分享android技术,记录知识

  • 博客(37)
  • 资源 (12)
  • 收藏
  • 关注

原创 Android 9.0 Vold挂载流程解析(上)

我们分2篇文章来介绍Android 9.0中存储卡的挂载流程,本篇文章先介绍总体的挂载模块、Vold进程的入口main函数的详细分析,有了这些基础知识,下一篇中我们再详细介绍收到驱动层消息是怎么挂载和卸载存储卡的,还有framework层如果与vold进程通讯交流。本篇文章介绍总体的挂载模块、Vold进程的入口main函数的详细分析,下一篇将介绍收到插拔事件如果管理存储卡信息和状态与Framework层通讯。

2023-08-17 15:29:35 1595 1

原创 Android 9.0 Vold挂载流程解析(下)

挂载和卸载的流程还是比较简单,出了这2个功能外,Vold还提供了格式化、挂载卸载cifs文件系统(网上邻居的功能),大家如果感兴趣可以根据上面分析的思路去阅读源码;

2023-08-18 17:29:54 746

原创 Binder机制原理解析

Binder机制原理解析前言我们都知道Android应用程序由Activity、Service、Broadcast Receiver、Content Provider四大组件构成的,他们可能运行在不同进程中,还有Android系统中还有各种服务,例如Actiivty管理服务ActivityManagerService、电源管理服务PowerManagerService、显示管理服务DisplayManagerService、包管理服务PackageManagerService等服务,这些服务在都在系统进

2023-08-17 17:35:04 991

原创 系统应用截屏功能,从SystemUI中抽离出的功能,很简约

系统应用截屏功能

2022-08-03 18:07:58 174

原创 Android 8.1 SystemUI之状态栏、下拉菜单通知、导航栏分析(一)

一、SystemUI简要介绍作为Android系统核心应用,SystemUI负责反馈系统及应用状态并与用户保持大量的交互,功能代码逻辑也非常复杂。功能代码模块如下图:StatusBar:通知消息提示和状态展现NavigationBar:返回,HOME,RecentKeyGuard:锁屏模块可以看做单独的应用,提供基本的手机个人隐私保护Recents:近期应用管理,以堆叠栈的形式展现。Notification Panel:展示系统或应用通知内容。提供快速系统设置开关。VolumeUI:来用展示

2021-10-09 19:33:32 3091

原创 音频的原始数据和压缩数据结构讲解

一、音频原始PCM数据PCM(Pulse Code Modulation),脉冲编码调制。人耳听到的是模拟信号,PCM是把声音从模拟信号转化为数字信号的技术。原理是用一个固定的频率对模拟信号进行采样,采样后的信号在波形上看就像一串连续的幅值不一的脉冲(脉搏似的短暂起伏的电冲击),把这些脉冲的幅值按一定精度进行量化,这些量化后的数值被连续的输出、传输、处理或记录到存储介质中,所有这些组成了数字音频的产生过程(抽样、量化、编码三个过程)。PCM数据常用量化指标采样率(Sample rate):每秒钟采样

2021-06-19 17:36:32 3355

原创 音视频基础知识讲解

在生活中我们会碰到各种格式的视频文件,如mp4、flv、rmvb、mkv、avi等格式,大家有想过这些格式的本质是什么吗?这些音视频数据是如何存储的?播放器又是如何去云端解析并播放这些文件?想要弄明白这些问题,我们很有必要去学习下音视频的一些基础知识。1.视频播放器的原理首先说一下上文提到的这些格式都是一种封装格式,它相当于一个容器,里面装了音频流、视频流、字幕流等信息,其中视频流、音频流都是压缩后的数据,如视频流通过h264编码压缩后的数据、音频通过aac编码压缩后的数据。而视频播放器如果想要播放一个

2021-06-19 17:07:40 1240

原创 FFMPEG Demo分析之encode_video.c

前言本系列文章FFMPEG Demo分析之muxing.cFFMPEG Demo分析之demuxing_decoding.cFFMPEG Demo分析之decode_video.c本篇文章来介绍一下单独使用libavcodec库进行编码视频文件。编码音频和编码视频的步骤其实都差不多。先来简单介绍下编码的步骤。步骤如下:找到编码器->分配编码器上下文->给编码器上下文赋值一些必要的编码参数->打开编码器->分配AVPacket和AVFrame->给AVFrame赋值一

2021-06-19 16:13:06 560

原创 FFMPEG Demo分析之decode_video.c

前言之前二篇文章分别介绍了音视频从编码封装全过程 、解封装解码全过程 :FFMPEG Demo分析之muxing.cFFMPEG Demo分析之demuxing_decoding.c今天这篇文章主要学习下如何单独的使用编解码器 解码音频或者视频。因为demo中音频和视频的解码步骤都差不多。我们就以decode_video.c解码视频为例进行讲解。Demo中代码重点概况在这个demo中需要用到个重要函数av_parser_parse2。这个函数的作用就是输入压缩数据裸流拿到一个个的AVPacket

2021-06-19 11:17:12 988 2

原创 FFMPEG Demo分析之demuxing_decoding.c

今天我们来分析另一个demo示例demuxing_decoding.c 这个示例主要功能就是把一个音视频文件分解为原始视频流YUV文件和原始音频流PCM文件 。首先我们先看一下流程图,如下图:/* * Copyright (c) 2012 Stefano Sabatini * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated

2021-06-09 17:14:54 477

原创 FFMPEG Demo分析之muxing.c

FFMPEG Demo分析之muxing.c前言前言打算写一系列关于ffmpeg的文章,先写一些ffmpeg自带的example 分析,然后总结一些常用的ffmpeg的命令。我们都知道音视频编解码分为几个步骤 。以解码为例,解协议->解封装->音视频解码.。而编码就是以上步骤的反过程。今天来分析下muxing.c的代码讲解。 这个demo的功能是编码一个音视频文件。下面为代码结构的流程图接下来我附上我自己理解添加了注释的代码#include <stdlib.h>#incl

2021-06-08 15:29:01 615 3

原创 一个水波纹动画的实现

效果图按照往常惯例先看下效果图设计原理要实现图中的水波纹效果其实也很简单,首先想到的使用ValueAnimator动画来实现。计算最里面的水波纹和最外面的水波纹的距离,然后通过onAnimationUpdate回调获取当前的值画圆,这里我们需要用一个List来保存从动画开始到动画结束所以的值。用来在onDraw()来计算画多少个水波纹。注意这里还有颜色的透明度的变化还有每个水波纹之间的距离...

2020-04-01 12:00:14 872

原创 一个带阴影效果的圆形控制的View,可以上下左右中进行控制

@[TOC] 一个带阴影效果的圆形控制的View,可以上下左右中进行控制先看一下效果图用法 <!-- app:center_text="@string/tv" 中间的文本 app:center_icon="@drawable/ok_tv_normal" 中间的图标 两个都设置优先使用图标 app:center_is_can_click="t...

2020-03-30 19:00:27 364

原创 PCM无符号16位小端存储文件读取和解析总结

PCM无符号16位小端存储文件读取和解析总结假设小端存储方式的文件中存储了0xF3FF ,存储的真实的数据是多少呢?真实的数据应该是-13,因为是小端存储方式所以应该把高位和低位互换即0xFFF3,由于最高位为1,所以要求补码才对,即0x800D,即十进制的-13。再假设把0xF3FF读取到内存中, 读取到指针位置为0x00000001中,如果cpu是小端存储的方式,那么高字节存储高位,低字...

2019-12-21 16:23:13 1552

原创 Spinner的android:overlapAnchor属性引发的下拉列表显示不全问题

当在xml中设置android:overlapAnchor="false"使下拉框不遮挡住了Spinner的显示时,当Spinner下拉显示的列表数据过多时,且下拉列表方向为向上,将导致下拉列表的数据显示不完整,会少显示前面几条。这个问题困扰许久,特此记录下。所以还是不要用这个属性,设置setDropDownVerticalOffset()方法来达到不遮住的效果。...

2019-11-07 16:20:03 2040

原创 带进度的圆形进度条的实现

今天通过自定义View来实现一个带进度的圆形进度条,实现的最终效果如下图所示: 现在来讲一下设计的思路:首先这个进度条可以自定义小圆角矩形的数量、小圆角矩形大小、小圆角矩形的圆角角度、未完成进度时的颜色,完成进度时的颜色、文字大小、文字颜色、圆形半径,所以需要自定义这些参数;那如何画这个圆形进度呢?我们需要先画一个小圆角矩形,再旋转画布再画矩形,如图这里有12个小圆角矩形,每次旋转360/1...

2018-04-29 17:57:57 1818

原创 线性表链式结构的实现

上一节实现了线性表顺序结构的实现,这节来实现链式结构的线性表。还是利用C++语言来实现。linklineartable.h#pragma oncetypedef int TypeName;struct Node{ TypeName data; Node * next;}Snode;typedef struct Node* Pnode;void i...

2018-04-15 15:33:45 514

原创 线性表顺序存储结构的实现

线性表是一个有序序列,若元素存在多个,则第一个元素没有前驱,最后一个没有后继,其他元素都有且只有一个前驱和后继。线性表是有限的,线性表元素个数n(n&gt;=0)定义为线性表长度,当n==0时,称为空表。 线性表有两种物理结构,第一种为顺序存储结构,另一种为链式存储结构。这一章先来利用C++实现顺序存储结构。头文件声明lineartable.h#pragma once/*线性...

2018-04-14 13:00:49 919 3

原创 RxJava2操作符(一)

RxJava是一个在 Java VM 上使用可观测的序列来组成异步的、基于事件的程序的库。简单来说就是异步操作工具库。它可以在碰到繁琐、复杂的异步的功能,依然能用保持代码的简洁。 RxJava使用的是观察者模式,Observable(被观察者)与Observer(观察者)通过 subscribe (订阅)实现订阅关系。下面来先写一个简单的例子。来说明他们之间的关系 /* *...

2018-04-04 19:59:11 241

原创 InputMethodManager引起的内存泄漏解决方案,亲测有效

通过leakcanary检测内存泄漏,老是出现InputMethodManager引起的内存泄漏,查看过很多资料,应该是android源码的bug。leakcanary官方提供的解决这个问题的方法,测试发现没有用。通过反复查阅测试发现下面的方法可以解决这个问题,所以记录下来先写一个透明的过渡Activity/** * 解决InputMethodManager引起的内存泄漏 * ...

2018-04-04 19:58:10 2744 1

原创 详解Android Studio+Gradle3.0编写JNI

今天学习下如何编写第一个JNI代码,实现JNI需要先下载NDK,由于现在Android Studio使用CMake编译jni的C/C++文件,所以还需要下载CMake和LLDB,如下图通过Android Studio来下载: 1.新建一个工程NDKSimple,如下图: (图中cpp...

2018-04-03 20:37:21 468 1

转载 Spinner样式的修改

修改Spinner中文字、箭头,自定义样式:http://blog.csdn.net/crazy1235/article/details/70903974

2018-03-29 16:32:33 2310

原创 快速集成Twitter、Facebook登录并获取用户信息

最近公司做一个国外的项目,需要集成Twitter、Facebook登录,所以在此记录下集成的过程。由于Twitter、Facebook是国外软件,需要翻墙,这个自行解决。Twitter登录的集成首先需要在https://apps.twitter.com/这个网站创建你的APP,创建完之后可以获取到Consumer Key、Consumer Secret 。如下图: 集成步骤...

2018-03-10 12:51:19 4574

原创 Glide的高级用法

这个礼拜学习了郭霖大神的Glide最全解析专题文章,特此在此做个总结。记录一些Glide的高级用法。自定义GlideUrl加载图片如果图片出于安全的考虑需要在图片地址后面加上token,这样导致同一张图片导致不同的地址,列如下面的地址:http://url.image.com/test.jpg?token=adfnjkews8832734这里的token可能随时都会变,这样就导致图

2018-02-03 16:52:44 7310 1

原创 仿微信QQ查看大图缩放动画

今天来写一篇关于点击小图查看大图的缩放动画的文章,效果图如下所示: 先来讲一下实现的思路:看到这个效果图,想都不用想就知道用属性动画或者补间动画通过缩放、位移、改变透明度来实现。首先点击小图会跳转到另一个Activity B来显示大图。这个Activity是透明的Activity(因为点击大图执行退出动画时,需要看到上一个界面,效果才更佳)。需要传小图的位置、大小、图片地址三个信息给Acti

2018-01-31 11:12:31 922

原创 Android中的线程池详解

Android常见的线程池有四种,分别是FixThreadPool、CachedThreadPool、ScheduledThreadPool、SingleThreadExecutor。他们都是直接或间接通过配置ThreadPoolExecutor来实现自己的功能特性的。所以下面我们首先来介绍ThreadPoolExecutor这个类。ThreadPoolExecutorThreadPool

2018-01-27 15:21:33 388

原创 解决SwipeRefreshLayout嵌套ViewPager产生的滑动冲突的问题

解决滑动冲突主要有内部解决法和外部解决法,所以对于这个问题可以重写ViewPager的dispatchTouchEvent(MotionEvent ev)方法或者重写SwipeRefreshLayout的onInterceptTouchEvent(MotionEvent ev)根据逻辑判断事件消费给谁。我最先通过内部解决法重写ViewPager 发现没有效果,代码如下://重写ViewPa

2018-01-26 16:03:23 577

原创 android WIFi开发

android WIFI开发主要通过WifiManager这个类与系统进行跨进程通信实现的。这篇文章来讲解如何进行WIFI的操作和WIFI热点的操作。WIFI的操作首先需要添加以下权限: uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/> uses-permissi

2018-01-08 16:22:40 654

原创 RemoteViews讲解

RemoteViews在日常开发中主要用于通知栏和桌面小部件的开发。它继承了Parcelable,所以可以很好的通过Binder来进行跨进程通信,里面提供了一系列的方法用于跨进程的更新界面。RemoteViews一个最常用的构造方法是RemoteViews(String packageName,int layoutId),第一个参数是包名,第二个参数是待加载的布局文件。RemoteViews支持的控

2017-12-26 20:02:30 1898

原创 Notification讲解

notification即通知在开发中很常见,在开发中我们根据需求要实现各种各样的通知,如普通通知、进度条通知、可展开的通知、媒体通知、自定义布局的通知。本篇文章就来讲解这些通知的实现。普通通知为了兼容性我们用v7包下的NotificationCompat 来实现通知,这个类是继承了·v4包下的NotificationCompat。下面先写一个简单的通知,再慢慢讲解。 Notification

2017-12-23 11:35:53 573

原创 ViewFlipper的使用

ViewFlipper的介绍ViewFlipper是一个切换控件,本质是一个FrameLayout,所以可以添加子控件,让这些子控件有切换效果并可以设置切换动画。可以用来做轮播图、跑马灯等效果。ViewFlipper的基本方法在xml布局中的方法介绍:android:autoStart: 设置自动加载下一个Viewandroid:flipInterval:设置View之间切换的时间间隔andro

2017-12-17 13:38:54 584

原创 判断ListView、WebView、ScrollView到达顶部和底部

1.ListView/** * 判断listView到达顶部 * @return */ public boolean isListViewReachTop() { boolean result=false; if(getFirstVisiblePosition()==0){ View topChildView

2017-12-08 18:51:26 596

原创 完美解决将布局延伸到状态栏中

1.前言上篇文章讲了如何把ToolBar封装到基类Activity中和如何在android4.4及以上系统中实现沉浸式状态栏、如何更改状态栏字体颜色。接下来这篇文章介绍Fragment的简单封装和如何将内容布局延伸到状态栏当中。2.实现步骤先看一下实现的效果图: 如图这个Activity中有四个Fragment,每个Fragment状态栏颜色不一样并且首页那个Fr

2017-12-08 18:10:55 5403

原创 ToolBar的封装、动态改变状态栏颜色

1.前言上一篇文章介绍了ToolBar的使用方法,在日常开发中ToolBar会在很多的Activity中同时使用,所以我们有必要把ToolBar进行封装,方便调用。2.ToolBar的封装基本思路是写一个单独的ToolBar的文件,再写一个基类Activity重写它的setContentView()方法,在这个方法里添加ToolBar。具体代码如下:package bcjm.myapplicatio

2017-11-30 20:08:59 1283

原创 ToolBar的使用

1.概述Toolbar是google在android 5.0推出的新的导航栏控件,用于替代ActionBar,在android 5.0以下使用该控件需要导入support V7 包。2. 使用步骤2.1 引入V7包在gradle中导入v7包,如下:compile 'com.android.support:appcompat-v7:25.3.0'后面的版本号最好和compileSdkVersion 版

2017-11-23 17:55:46 311

原创 View的自定义属性和位置关系

1.View自定义属性1.1 在资源文件中定义自定义参数,如: <declare-styleable name="IRecyclerView"> <attr name="refreshHeaderLayout" format="reference" /> <attr name="loadMoreFooterLayout" format="reference" />

2017-11-18 11:41:02 231

原创 Android 6.0动态申请权限

Android 6.0动态申请权限在android 6.0以下,开发者只需要在配置清单中说明,用户安装APP同意APP所申请的所有权限才能进行安装,而在android 6.0以上,开发者不仅要在配置清单中说明,对于一些危险权限还需要代码动态申请。这些危险权限在用户授权后才可以使用,比如调用摄像头、读取通讯录、定位等。

2017-10-23 19:47:17 405

Binder机制原理解析

Android Binder机制全解析,从Kernel binder层到native binder到java binder。很详细值得推荐阅读

2023-08-17

pcm原始数据测试,16位,44100hz,2声道

PCM测试原始数据,一首歌,16位 44100hz 双声道

2019-08-21

Notification各种样式的用法,详情见http://blog.csdn.net/u014795729/article/details/78879014

Notification各种样式的用法,详情见http://blog.csdn.net/u014795729/article/details/78879014

2017-12-28

将内容布局延伸到状态栏中

http://blog.csdn.net/u014795729/article/details/78752406,这个资源分不能改啊,最低2分

2017-12-08

ToolBarDemo

ToolBar的使用:http://blog.csdn.net/u014795729/article/details/78601611

2017-11-23

android简单AIDL调用Demo

android 简单AIDL跨进程调用Demo。供初学者学习参考。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。

2017-09-23

android 双ListView联动

android 双ListView实现联动效果。只有一个文件,Dialog实现。 

2017-09-23

根据中国地区码,省市区三级的json文件

根据中国地区码,省市区三级联动json文件。 根据中国地区码,省市区三级联动json文件。 根据中国地区码,省市区三级联动json文件。

2017-09-13

仿微博圆形加载

仿微博圆形加载View ,可供参考

2016-12-14

仿QQ下拉和上拉阻尼效果

仿QQ阻尼效果 ScrollView嵌套ListView

2016-09-12

android 自定义验证码

android自定义View 简单实用的验证码

2016-09-11

android全局事件监听器

简单好用的全局监听器,没有用任何的第三方库,代码简单明了

2016-09-03

Sql语言基本c操作

基本sql语言操作,具有表的查询,删除,更新的基本操作。是不错的文档。

2015-04-29

空空如也

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

TA关注的人

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