Android
文章平均质量分 68
东东旭huster
这个作者很懒,什么都没留下…
展开
-
android overlay机制实践
前言最近在做launcher时有一个需求是通过overlay机制实现替换主题,中间遇到了不少问题,这里记录一下自己以后能用到,也希望能帮助有需要的同学。我使用的是android11系统,参考官方文档https://source.android.google.cn/devices/architecture/rros?hl=zh-cn概述android overlay是一种资源的动态替换机制,它的工作原理是将叠加层软件包中定义的资源映射到目标软件包中定义的资源。当应用尝试解析目标软件包中资源的值时,系原创 2022-04-07 14:55:26 · 6700 阅读 · 1 评论 -
Media Session框架的简单介绍
1、介绍Media Session框架是google在android5之后引入的一个音乐播放框架,用来解决音乐界面和服务之间的通信问题,特别注意的是,我们现在都是在比较高的版本上开发,因此要用比较高的兼容包,一般都以Compat结尾。Media Session框架中有四个常用的成员类,它们是整个流程控制的核心,下面我们一一介绍一下。MediaBrowser媒体浏览器,用来连接媒体服务MediaBrowserService和订阅数据,在注册的回调接口中我们就可以获取到Service的连接状态、获取原创 2022-01-20 21:02:49 · 8695 阅读 · 0 评论 -
android Room的简单使用
使用Room操作数据库先看一下Room由哪几部分组成的Entity,用来封装实际数据的实体类,它和数据库中的表一一对应,有几张表就建立几个实体类,建立好Entity后,表中各列会自动生成。Dao, 将对数据库的各项操作都封装在这里,逻辑层直接和Dao打交道,不直接操作数据库。Database, 定义数据库的关键信息,如版本号,包含的实体类,以及提供Dao层的访问实例。下面看一下使用方式1、导入依赖 implementation 'androidx.room:room-runtime:原创 2021-10-13 20:33:57 · 1917 阅读 · 0 评论 -
android 窗口管理机制
1概述Android的窗口管理主要由Window, WindowManager, WindowManagerServic三者实现window是一个抽象的概念,它必须为其添加一个View实体才能被我们所看到,不管是Activity,Toast,还是其他的Dialog之类的组件,都必须放在window上。而如果我们要对window进行操作的话,就必须通过windowManager,事实上,对window的操作是通过WindowManagerServic来实现的,而WindowManager可以看做是一个管理者原创 2021-08-10 13:43:42 · 2398 阅读 · 2 评论 -
android 动画
逐帧动画逐帧动画就是快速播放单张图片因为视觉暂停的原因看起看就是动画效果。准备好所需要的图片资源,在drawable目录下创建一个xml文件,利用animation-list配置好动画图片。fairy.xml<?xml version="1.0" encoding="utf-8"?><animation-list xmlns:android="http://schemas.android.com/apk/res/android"><!-- duration原创 2021-08-06 11:32:23 · 608 阅读 · 0 评论 -
Tablayout tab没有均分宽度显示
使用TabLayout时,一般我们不用设置tab的排列方式,默认都是均分宽度居中显示的,但是今天遇到一个奇怪的问题,在鸿蒙的平板上,两个tab紧紧的挨在一起在中间。但是还是不行,只能一个属性一个属性的尝试,最后发现再加上app:tabMaxWidth="0dp"就可以了。但是在手机上又是正常的,给其设置了。原创 2023-02-28 11:37:55 · 536 阅读 · 1 评论 -
android判断Activity是否存在
遇到一个需求是通过QQ分享文件,要启动QQ的这个界面,com.tencent.mobileqq.activity.JumpActivity,但是需要先判断这个Activity是否存在,有两种方法,首先创建一个Intent。看一些文章两种方法都可以,但是测试发现方法一未安装QQ时会抛出异常,程序崩溃,所以只能用第二种。原创 2023-01-01 18:29:01 · 1116 阅读 · 0 评论 -
android 项目中导入flutter module
Android集成flutter module原创 2022-08-30 18:44:03 · 2285 阅读 · 0 评论 -
WindowInsetsControllerCompat简单使用
WindowInsetsControllerCompat 简单使用原创 2022-07-28 15:56:32 · 2773 阅读 · 1 评论 -
viewpager冲突解决
viewpager滑动冲突解决原创 2022-07-13 11:16:58 · 932 阅读 · 0 评论 -
android判断蓝牙的连接情况
android蓝牙连接状态判断原创 2022-07-11 19:39:35 · 6128 阅读 · 2 评论 -
一些对模糊搜索的思考
歌曲搜索原创 2022-06-30 22:59:56 · 515 阅读 · 1 评论 -
view的刷新机制
view的刷新机制原创 2022-06-23 00:53:16 · 1640 阅读 · 0 评论 -
android事件分发机制
Android事件分发原创 2022-06-06 00:41:08 · 278 阅读 · 0 评论 -
图片的高效加载
前言最近写了一个相册应用,发现自己的界面卡的要死,有时候还会崩掉,后来发现是自己加载图片的时候没有处理,导致OOM了,下面就记录一下图片加载和缩放。Bitmap构建在Android程序中,无论图片是jpg 还是png, 都是表示为一个Bitmap对象, 我们一般是通过BitmapFactory来构建,它主要有四种常用方法BitmapFactory.decodeFile(...)BitmapFactory.decodeResource(...)BitmapFactory.decodeStream(原创 2022-05-15 18:02:44 · 257 阅读 · 0 评论 -
android应用层aidl的简单使用
aidl的Android提供的方便我们进行应用间通信的工具,其全称是Android Interface define language,本文记录一下如何在两个应用之间通过aidl进行通信。和普通的接口文件相比有如下的一些特性只能定义方法,不能定义常量支持8中基本类型支持String,CharSequence支持List,确切的说只支持ArrayList支持Map(HashMap)支持Parcelable对象1、接口定义在项目中main目录下,创建一个aidl文件夹,再创建aidl文件。原创 2022-05-08 19:30:15 · 999 阅读 · 0 评论 -
开发遇到问题记录
1、aar包导入项目中网上很多教程都是现将arr包导入到libs目录中,在app目录下的build.grade文件中添加repositories { flatDir { dirs 'libs' }}但是我尝试了之后还是会编译报错build was configured to prefer settings repositories over project repositories but repository ‘flatdir’ was added by buil原创 2022-05-06 10:31:54 · 3823 阅读 · 0 评论 -
RecyclerView使用技巧总结
RecyclerView的一些使用技巧原创 2022-05-06 00:16:54 · 1927 阅读 · 0 评论 -
Activity与Fragment之间通信的多种方式
前言本文主要介绍Activity与Fragment之间通信,以及同属于一个Activity的Fragment之间的通信。主要的方式有1、通过原创 2022-04-12 23:56:55 · 7464 阅读 · 1 评论 -
android 自定义view
本文我们将自定义一个View,来实现一个时钟,先看一下效果图。这里只是截取了一个静态图,实际上可以秒针是运动的。至于其他的更好看的效果在这基础上可以自己添加。1、属性设定在res/values 目录下新建立一个文件attrs.xml, 我们将在里面定义时钟所需要的属性,这里我只是定义了4个属性,分别是时、分、秒、背景颜色。<?xml version="1.0" encoding="utf-8"?><resources> <declare-styleable n原创 2022-02-11 18:12:23 · 1414 阅读 · 0 评论 -
couldn‘t find “libijkffmpeg.so“
今天在学习ijkplayer的使用,因为要支持AVI等视频格式,所以需要先编译,我没有经过编译,直接下载了别人已经编译好的so库,地址在这里https://github.com/xiong-it/compiled_ijkplayer4android由于grade文件配置不正确,我出现了错误couldn’t find “libijkffmpeg.so”, 找了好久错误终于配置正确了,这里记录一下。1、将so文件复制到工程中,目录结构如下和src在同一个目录就行了。2、在grade文件中导入so库原创 2022-03-14 14:59:27 · 3800 阅读 · 0 评论 -
TabLayout+ViewPager2的简单使用
学习之前我们先看一下显示的效果这里显示的底部导航栏,如果想实现的顶部导航栏,只需要调整一下TabLayout的位置即可。1、导入依赖使用ViewPager2之前需要先导入依赖,这里的依赖可能不是最新的,可以自己查找最新的版本。TabLayout不需要导入。implementation "androidx.viewpager2:viewpager2:1.0.0"2、布局<androidx.viewpager2.widget.ViewPager2 android:layout_wi原创 2022-02-22 00:30:15 · 5729 阅读 · 0 评论 -
aidl 实现native service和App通信
之前一直写的是android应用之间的aidl开发,最近学习的是native service和App之间通过aidl进行通信,这里记录一下。主要介绍的是native service和App端aidl的实现,至于service的编译过程我这里没有详细的记录。我所用的android版本是11.1、定义aidl文件aidl文件中定义了我们想要实现的功能,是后续一切的开始,为了测试回调功能,我这里定义了一个回调接口和一个自定义数据类型FileInfo, 用来跨进程传递信息的自定义数据结构。FileInfo.a原创 2022-01-19 10:36:54 · 5467 阅读 · 3 评论 -
android 实现一个开机自启动的service
1、概述本文记录了如何在android系统中创建一个native服务,实现简单的文件复制功能,并实现开机启动。2、创建工程文件在android 源码中找一个位置,创建一个工程文件夹,里面用来存放我们项目所需的各种文件,一般在vendor目录下,本文是是frameworks//vendor下创建了一个FileService文件夹,然后再创建aidl文件,包含我们需要定义的功能,aidl文件的定义如下。package com.android.fileoperationinterface IFileO原创 2022-01-17 20:30:37 · 6106 阅读 · 3 评论 -
android 高版本联网HTTP异常问题
转载自"https://blog.csdn.net/gengkui9897/article/details/82863966"android 高版本联网HTTP异常问题为保证用户数据和设备的安全,Google针对下一代 Android 系统(Android P) 的应用程序,将要求默认使用加密连接,这意味着 Android P 将禁止 App 使用所有未加密的连接,因此运行 Android P 系统的安卓设备无论是接收或者发送流量,未来都不能明码传输,需要使用下一代(Transport Layer Se转载 2021-12-16 11:34:53 · 318 阅读 · 0 评论 -
android蓝牙简单开发
概述前段时间学习了一些蓝牙开发的知识,记录一下Android中蓝牙的简单开发。下面是最重要的两个类。BluetoothAdapter : 蓝牙适配器,通过getDefaultAdapter ()去获取一个实例,如果设备不支持蓝牙的话,返回的是一个null对象,通过它,可以打开、关闭蓝牙,扫描设备、向指定设备创建socket通道…BluetoothDevice : 代表一个设备对象,可以通过它获取设备的名字、地址、类型等,也可以创建匹配,建立socket通道等等。1、权限申请<uses-pe原创 2021-12-06 15:52:57 · 3315 阅读 · 0 评论 -
Activity Result
开发过程中,我们经常需要从当前活动启动另一个活动获取一些数据,比如从图库选择图片,读取通讯录,拍照等,以前我们通常都是使用startActivityForResult去启动一个Activity,但是现在发现它过时了,官方推荐使用Activity Results API,下面我们看一下它的使用方式。1、导入依赖implementation 'androidx.activity:activity:1.2.0-beta01'implementation 'androidx.fragment:fragment原创 2021-12-06 14:03:40 · 606 阅读 · 0 评论 -
在代码中设置约束条件ConstraintSet
序言最近越来越喜欢使用约束布局ConstraintLayout了,今天突然想到可不可以通过代码改变约束条件,从而实现重新布局的效果呢?一查知道果然有这样的方法。使用方式 这里我们需要借助到ConstraintSet这个类来实现对布局的操作,一般步骤如下构建一个ConstraintSet对象ConstraintSet constraintSet = new ConstraintSet();将我们的约束布局克隆出来constraintSet.clone(MainActivity.thi原创 2021-11-18 09:37:54 · 3948 阅读 · 0 评论 -
Android Results API
开发过程中,我们经常需要从当前活动启动另一个活动获取一些数据,比如从图库选择图片,读取通讯录,拍照等,以前我们通常都是使用startActivityForResult去启动一个Activity,但是现在发现它过时了,官方推荐使用Activity Results API,下面我们看一下它的使用方式。1、导入依赖implementation 'androidx.activity:activity:1.2.0-beta01'implementation 'androidx.fragment:fragment原创 2021-11-10 16:50:26 · 2463 阅读 · 0 评论 -
UML中六种箭头的含义
转载UML图六种箭头含义转载 2021-11-07 16:28:16 · 123 阅读 · 0 评论 -
databinding介绍
1、DataBinding介绍DataBinding 是 Google 在 Jetpack 中推出的一款数据绑定的支持库,利用该库可以实现在页面组件中直接绑定应用程序的数据源。使其维护起来更加方便,架构更明确简介。所谓的绑定,是绑定什么呢?数据直接绑定到UI上,数据改变时UI自动更新UI上的数据绑定到变量中,当数据(如EditText中的数据)改变时自动更新DataBinding非常适合用于MVVM模式中充当View和ViewModel的双向通讯的工具,引入DataBinding之后,我们可以少原创 2021-11-04 19:07:59 · 5152 阅读 · 0 评论 -
Android 菜单
android 中的菜单总结原创 2021-11-01 19:48:36 · 2031 阅读 · 0 评论 -
EventBus简单使用
概述EventBus是一个开源库,它使用的是发布/订阅模式来实现组件之间的通信,相对于广播机制,handler机制等,其所需要的代码更少,耦合度更低,下面是一张官方的图说明其工作方式。[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OAgB3Fax-1634015540513)(eventbus.png)]从图中我们可以看出EventBus的3个主体内容Publisher(发布者),在任何线程都可以发布信息Subsciber(订阅者),只需要在函数上加上注解@Sub原创 2021-10-12 13:12:52 · 610 阅读 · 0 评论 -
WorkManager的使用
WorkManager的使用在使用IntentService的时候,发现这个类过期了,官方推荐使用WorkManager, 下面来学习一下WorkManager的使用。1、加入WorkManager依赖implementation 'androidx.work:work-runtime:2.4.0'2、新建一个类继承Worker和IntentService类似,需要写一个类来继承Worker,并且重写doWork()方法,将工作放在doWork()中实现,它会自动创建新的线程,所以可以处理一些耗原创 2021-10-11 19:10:13 · 853 阅读 · 0 评论 -
Android RescueParty
文章目录1、介绍2、源码分布3、流程分析3.1 对象构造3.2 system_server崩溃3.3 系统常驻进程崩溃4、总结1、介绍rescue party救援程序是Android 8加入的,主要目的是如果监控到核心程序出现循环崩溃时,就会启动救援程序,根据不同的救援级别做不同的操作,最严重的情况下可能会进入Recovery模式。Rescue Party共有5种救援级别,对应如下。救援级别对应数值LEVEL_NONE0LEVEL_RESET_SETTINGS_UNTRUS原创 2021-09-10 14:44:12 · 1076 阅读 · 0 评论 -
ViewModel、LiveData、Lifecycle的使用
ViewModelViewModel主要有两个作用,一是利用它保存数据,比如界面上的textView,二是利用它生命周期长的特点,将与界面有关的数据保存在ViewModel中,当Activity被销毁重建时也能得到恢复。创建一个继承viewModel的类public class MyViewModel extends ViewModel { // 需要保存的数据 int count = 0; }为Activity添加一个ViewModel的成员,并且实例化public原创 2021-09-01 17:34:24 · 649 阅读 · 0 评论 -
Recycleview设置item间距的办法
https://www.jianshu.com/p/e372cec819db转载 2021-08-23 18:20:31 · 355 阅读 · 0 评论 -
SAX解析与DOM解析
SAX解析sax解析需要继承DefaultHandler类,并且重写其中的几个方法。public class MyHandler extends DefaultHandler { private ArrayList<String> ids=new ArrayList<>(); private ArrayList<String> names = new ArrayList<>(); private ArrayList<St原创 2021-08-11 10:27:50 · 688 阅读 · 1 评论 -
contentprovider实例
创建一个contentProvider首先我们需要准备好一个数据库,创建一张表,作为操作的基本表public class DbHelper extends SQLiteOpenHelper { public DbHelper(@Nullable Context context, @Nullable String name, @Nullable SQLiteDatabase.CursorFactory factory, int version) { super(context,原创 2021-08-08 18:49:01 · 724 阅读 · 0 评论 -
Adapter与AdapterView
Adapter与AdapterViewAdapterView列表视图,它由adpater(适配器)为其提供数据,可以这样看,AdapterView是MVC模式中的V,而adapter是C。对于列表类的控件,比如Listview ,RecycleView, GridView,ScrollView等控件,都需要为其提供一个适配器。adapter常用的有ArrayAdapter, SimpleAdapter, 以及自定义的adapter。1、 ArrayAdapter一般只能使用在列表项中只有文本的情况原创 2021-08-05 15:57:51 · 216 阅读 · 0 评论