- 博客(30)
- 收藏
- 关注
原创 Android 11 FileProvider的使用和限制
从Android 7开始,将不允许在app之间,使用file uri,即file://的方式,传递一个file,否则会抛出异常:FileUriExposedException ,其解决方案,就是使用FileProvider,用content://代替file://,同时需要将targetSdk,升级到24。主要用于系统相机拍照及图片裁剪、应用之间数据访问、应用的升级等。
2024-09-12 09:30:00
1077
原创 Android 11添加系统服务,并封装jar包供第三方应用使用
如果你是做技术支持,有没有遇到这种情况,客户既要实现具备系统权限的功能,但是呢,又不想把自己的应用做成系统应用。这时候,我们可以考虑这种方式。
2024-09-02 11:02:20
1221
原创 Android源码编译_内置apk
在开发过程中,有一部分apk,我们是需要出厂内置好的,例如输入法、客户定制app等,这里内置分两种,一种是只内置apk,不含apk源码,一种是包含apk源码。
2024-09-02 09:30:00
969
原创 Android进程通信-AIDL
主要实现是,一个进程作为服务端,提供数据或数据接口,另一个进程作为客户端,通过绑定的service来获取服务端提供的数据或数据接口,达到进程的通信。
2024-08-30 09:45:00
859
原创 Android应用在未启动的情况下无法收到开机广播
当我们app安装后,未启动,则标记为stoped状态,只有至少手动打开一次,才能改变状态,接收特定广播,也是为了防止广播无意开启未启动应用的服务
2024-08-29 09:45:00
776
原创 Android源码编译_编译jar包
开发过程中了,我们很多时候会为了方便,将一些接口封装成jar包来使用。利用aosp源码编出jar包。我这里用的是mtk Android 11的源码。
2024-08-19 09:30:00
288
原创 pk8/x509.pem转换为keystore
做系统的,一般给我们的不是我们常用的.keystore或者.jks,而是给我们.pk8和.x509.pem文件。这时候我们就需要转一下
2024-05-30 09:15:00
986
1
原创 Android开发-JNI和NDK编程(JNI开发流程)
JavaJNI的本意是 Java Native Interface(Java本地接口),它是为了方便Java 调用C、C++等本地代码所封装的一层接口。我们都知道,Java的优点是跨平台,但是作为优点的同时,其在和本地交互的时候就出现了短板。Java的跨平台特性导致其本地交互的能力不够强大,一些和操作系统相关的特性Java无法完成,于是Java提供了JNI专门用于和本地代码交互,这样就增强了Java语言的本地交互能力。通过JavaJNI,用户可以调用用C、C++所编写的本地代码。
2024-05-27 14:47:26
968
原创 Android进程通信机制(IPC机制)
IPC,是进程之间通信或跨进程通信,为Inter-Process Communication得缩写,IPC也不是Android所独有得,任何一个操作系统都需要有相应的IPC机制。IPC应用的场景,既然是进程间通信,那就一定是多进程的场景下才考虑,比如某些工作需要运行在独立的进程中,或者利用多进程,开辟更大的内存空间等。Android中最有特色的进程间通信方式是Binder,除了Binder,还有Socket,管道、信号量、文件共享。二、Android中的多进程模式。
2024-03-31 10:25:04
1655
1
原创 RecyclerView的使用和源码理解(一)
recyclerView的详细使用,从官方介绍可知:“一个灵活的视图,用于提供进入大型数据集的有限窗口”。
2023-01-03 15:02:12
294
原创 Android使用POI操作excel(支持xls和xlsx)
一、说明及准备工作1.用于AS使用POI读取、创建、另存excel,兼容xlsx和xls格式2.下载poi-3.12-android-a.jar、poi-ooxml-schemas-3.12-20150511-a.jar两个POI包(版本自行选择),放入libs目录3.打开app目录的build.gradle,添加完整依赖:然后就可以开始干活了二、文件读取,删除操作过程1.创建workbook对象(1). 创建.xlsx文件对象 workbook = new XSSWorkbook(
2022-05-06 16:27:26
4621
原创 ViewRoot和DecorView
在介绍VIew的三大流程之前,我们先介绍一些基本概念,以便更好的理解View的measure、layout、draw过程,这里介绍VIewRoot和DecorView。1.ViewRoot是应于ViewRootImpl类,它连接VIewManager和Decor View。View的三大流程,是通ViewToot來完成。在ActivityThread中,当Activity对象被创建完毕后,会将DecorView添加到Window中,同时创建ViewRootImpl对象,并将ViewRootImpl对象和
2022-04-18 15:01:29
2311
原创 View的滑动冲突
滑动冲突一般是在界面中,内外两层同时可以滑动,这个时候就会产生滑动冲突。1、常见的滑动冲突场景场景1:外部滑动方向和内部滑动方向不一致场景2:外部滑动方向和内部滑动方向一致场景3:场景1和2嵌套分别如下:场景1主要是将ViewPager和Fragment配合使用,达到页面滑动的效果,可以通过左右滑动,切换页面,而在每个页面又会又ListView。如果使用的是ViewPager,就不需要注意这个问题,因为ViewPager内部已经处理了这个冲突。如果是Scroll View等,就需要我们手动处理
2022-04-18 10:22:00
424
原创 View的事件分发机制
1、点击事件的传递规则点击事件,即要分析的对象是MotionEvent,所以,点击事件的分发,实际是MotionEvent 的分发过程,主要由dispatchTouchEvent、onInterceptTouchEvent、onTouchEvent。public boolean dispatchTouchEvent(MotionEvent ev)用来进行事件的分发,如果事件能够传递到当前的View,则调用此方法,返回结果受当前View的onTouchEvent和下一级的dispatchTouchEv
2022-04-11 15:03:25
3668
原创 View的弹性滑动
弹性滑动,就是将一个大的滑动分成若干个小的滑动,并在一个事件段内,完成。实现方式有多种:1.使用Scroller对于Scroller 在View的基础知识中有过一点介绍,看一下源码,是如何实现弹性滑动的 Scroller scroller = new Scroller(mContext); //缓慢的移动到指定位置 private void smoothScrollTo(int destX,int destY){ int scrollX = getScrollX(); int deltaX
2022-03-02 11:53:28
1840
原创 View的滑动
View的滑动,用途很多,下拉刷新,通过滑动影藏和显示可以实现更多功能。主要实现方式包括一下三种:通过View本身提供的scrollTo/scrollBy方式来滑动通过动画,给View施加移动来实现滑动效果通过改变View的LayoutParams使得View重新布局,从而实现滑动1、使用scrollTo/scrollBy这两个方法是View自身提供的,来实现滑动效果,实现如下:/***Set the scrolled position of your view. This will c
2022-02-28 16:16:14
1755
原创 View的基础知识
1、view介绍view是Android中所有控件的基类,不管是button,还是Text View,或复杂的布局RelativeLayout和ListView,它们的基类,都是View,它是界面层控件的一个抽象。通过VIewGroup可以看出,ViewGroup中含有多个View,但它也是继承自View,所以,View可以是一个单独的控件,也可以是多个控件组成的一组控件。2、View的位置参数View的位置由它的四个顶点来决定,分别是top(左上角横坐标)、left(左上角纵坐标)、right(右下
2022-02-25 11:29:00
5248
原创 Activity的启动模式
一、Activity的启动模式首先说一下Activity的工作原理,默认情况下,我们每启动一个 Activity,系统会创建一个实例并将他们一 一放入任务栈中,当我们结束的时候,一 一回退,遵循“先进后出”的方式。所以,假如我们将同一个Activity启动多次,系统会重复创建多个实例。为此它提供了启动模式来修改系统的默认行为。目前有四种启动模式:standard、singleTop、singleTask、singleInstance。standard:标准模式,也是系统默认的模式,他不管这个
2022-02-21 11:15:42
355
原创 GreenDao升级、可保留历史数据
前言在最初设计中,往往有很多因素未考虑到,在开发过程中,一些功能的改变,或者增加,使得最初的结构,无法满足当前的需求。从而需要对数据库做升级。特别是项目已经上线,自动升级,并且保留原有数据显得尤为重要。升级步骤1.新建类,继承DaoMaster.OpenHelper,并且重写onUpgrade(Database db,int oldVersion,int newVersion)方法,在升级方法中对数据库升级,并且对数据迁移。我这里用的大佬写的工具类MigrationHelper,地址:https://
2021-12-22 09:46:09
655
原创 GreenDao_基本配置和使用
核心类介绍1.DaoMaster它持有数据库对象(SQLiteDataBase),并且提供了创建和删除表的静态方法。有两个内部类,OpenHelper、DevOpenHelper实现SQLiteOpenHelper,用来创建数据库表结构。2.DaoSession:DaoSession用来管理Dao对象,可通过get方法,获取XXDao对象,进行对表的基本操作。DaoSession本身也提供了一些基本的持久性方法,例如:插入,删除,更新等。3.Dao实体访问对象,对每个实体XX,GreenDao会
2021-12-21 09:42:45
2090
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人