Android
文章平均质量分 78
tracydragonlxy
这个作者很懒,什么都没留下…
展开
-
Android源码——Handler机制(一)
Handler是Android消息机制的上层接口。Handler可以将一个任务切换到Handler所在的线程中去执行。通常情况下,Handler的使用场景就是更新UI。@Override@Override@Override// 耗时操作.....}).start();在子线程中,进行耗时操作,执行完操作后,发送消息,通知主线程更新UI。这便是消息机制的典型应用场景。我们通常只会接触到Handler和Message来完成消息机制,其实内部还有两大助手来共同完成消息传递。原创 2024-06-28 14:46:28 · 909 阅读 · 1 评论 -
Android 实现竖排文本(垂直方向显示)
在 Android 应用程序中显示垂直文本可以通过多种方法实现,具体取决于项目的复杂性和要求。以下介绍在 Android 中显示垂直文本的几种方法。init();init();init();= text &&!init();init();@Overridei++) {这些方法应该涵盖了 Android 中显示竖排文本的大部分场景。自定义视图方法提供了最大的灵活性,而旋转TextView是最简单、最快的方法。原创 2024-05-22 18:09:38 · 1933 阅读 · 0 评论 -
Android 在attrs.xml添加属性时出现 Found item Attr/****** more than one time
在Android应用开发过程中,经常需要自定义控件,并且定义控件的属性,方便灵活的修改控件的显示样式,提高代码的可重用性和拓展性。的问题,相对而言,更推荐方式二的解决办法。方式二可以提高同名属性的重复性和利用率。标签外面,内部只声明引用,这样不同控件就可以重复使用了。中的每个属性名称必须是唯一的。修改同名的属性,使不同控件的属性名不一样。文件定义控件的属性,编译工程时报错了。文件中有多个同名条目时,通常会出现。通过上述两种方式,我们都可以解决。,这样就保证了属性名的唯一。中有同名的属性(比如。原创 2024-04-28 10:53:56 · 1360 阅读 · 3 评论 -
Android 使用SQLite保存数据
对于重复数据或结构化数据(例如联系信息),将数据保存到数据库是理想选择。软件包中提供了在 Android 上使用数据库所需的 API。本篇文章介绍在 Android 上使用SQLite数据库。SQL 数据库的主要原则之一是架构,即数据库组织方式的正式声明。架构反映在你用于创建数据库的 SQL 语句中。您可能会发现创建伴随类(称为协定类)很有用,该类以系统化、自记录的方式明确指定了架构的布局。协定类是定义 URI、表和列名称的常量的容器。通过协定类,您可以在同一软件包的所有其他类中使用相同的常量。原创 2024-03-29 11:25:26 · 1257 阅读 · 0 评论 -
Android批量加载图片OOM问题
将单个位图加载到界面中非常简单,但如果您需要同时加载较大的一组图片,则操作起来会比较复杂。实际上,在许多情况下(比如使用ListViewGridView或ViewPager等组件时),屏幕上的图片与可能很快会滚动到屏幕上的图片加起来,数量是无限的。系统通过循环利用移出屏幕的子视图来限制此类组件对内存的占用。垃圾回收器假设您不会保留任何长期的引用,因此也会释放已加载的位图。这些都没有问题,但是为了确保能够快速、流畅地加载界面,您必须避免每次这些图片返回到屏幕上时都要处理这些图片。原创 2024-02-20 10:08:22 · 1149 阅读 · 0 评论 -
Android-高效加载大图
图片有各种形状和大小。在很多情况下,它们的大小超过了典型应用界面的要求。例如,系统“图库”应用会显示使用 Android 设备的相机拍摄的照片,这些照片的分辨率通常远高于设备的屏幕密度。但是手机中每个应用的内存是有限的,程序占用了过高的内存就容易出现OOM(OutOfMemory)异常。理想情况下只希望在内存中加载较低分辨率的版本。分辨率较低的版本应与显示该版本的界面组件的大小相匹配。分辨率更高的图片不会带来任何明显的好处,但仍会占用宝贵的内存,并且会因为额外的动态缩放而产生额外的性能开销。原创 2023-12-18 15:09:27 · 911 阅读 · 1 评论 -
Android 截图功能实现
在Android应用中开发截图功能涉及到以下几个步骤:获取屏幕内容、处理截图、保存截图等。原创 2023-07-27 10:53:17 · 3941 阅读 · 0 评论 -
Android SeekBar控制视频播放进度(一)
使用VideoView控件播放视频时,我们希望能够调节播放的进度,一种方法是使用自带的控制器进行控制,另一种方法是自己实现一个SeekBar控制。原创 2023-03-31 15:03:27 · 1297 阅读 · 0 评论 -
Android Bluetooth(一)——蓝牙的开启和搜索
当设备完成配对后,系统会保存关于该设备的基本信息(例如设备的名称、类和 MAC 地址),并且可使用 Bluetooth API 读取这些信息。但是,这两台设备仍保持绑定状态,因此在未来的会话期间,只要二者在彼此的范围内且均未移除绑定,便可自动重新连接。用户可通过系统设置将设备设为在有限的时间内处于可检测到状态,或者,应用可请求用户在不离开应用的同时启用可检测性。设备发现是一个扫描过程,它会搜索局部区域内已启用蓝牙功能的设备,并请求与每台设备相关的某些信息。回调的调用,其结果代码等于设备可检测到的持续时间。原创 2023-02-23 19:11:52 · 8017 阅读 · 2 评论 -
Android 传感器概述(二)
大多数 Android 设备都有内置传感器,用来测量运动、屏幕方向和各种环境条件。这些传感器能够提供高度精确的原始数据,非常适合用来监测设备的三维移动或定位,或监测设备周围环境的变化。例如,游戏可以跟踪设备重力传感器的读数,以推断出复杂的用户手势和动作,如倾斜、摇晃、旋转或挥动。同样,天气应用可以使用设备的温度传感器和湿度传感器来计算和报告露点,旅行应用则可以使用地磁场传感器和加速度计来报告罗盘方位。原创 2023-01-31 20:24:31 · 1674 阅读 · 0 评论 -
Android 传感器概述(一)
大多数 Android 设备都有内置传感器,用来测量运动、屏幕方向和各种环境条件。这些传感器能够提供高度精确的原始数据,非常适合用来监测设备的三维移动或定位,或监测设备周围环境的变化。例如,游戏可以跟踪设备重力传感器的读数,以推断出复杂的用户手势和动作,如倾斜、摇晃、旋转或挥动。同样,天气应用可以使用设备的温度传感器和湿度传感器来计算和报告露点,旅行应用则可以使用地磁场传感器和加速度计来报告罗盘方位。Android 平台支持三大类传感器动态传感器这类传感器测量三个轴向上的加速力和旋转力。原创 2022-12-28 11:07:40 · 2665 阅读 · 0 评论 -
Android 创建桌面组件Widget——构建应用微件(二)
您可以将微件想象成“一目了然”的视图,它们让最重要的应用数据和功能一览无余,从用户的主屏幕即可进行访问。用户可以在其主屏幕面板间移动微件,如果系统支持,用户还可以调整微件的大小,按照他们的偏好量身定制微件中的信息量。在搭载 Android 8.0(API 级别 26)及更高版本的设备上,允许您创建固定的快捷方式的启动器也允许您将应用微件固定到启动器上。要创建预览图片,请启动此应用,为您的应用选择应用微件并设置您希望如何显示预览图片,然后将其保存并放在您的应用的可绘制资源中。的按钮,则可以使用以下。原创 2022-11-29 16:17:52 · 2608 阅读 · 0 评论 -
Android 创建桌面组件Widget——构建应用微件(一)
用户可以在其主屏幕面板间移动微件,如果系统支持,用户还可以调整微件的大小,按照他们的偏好量身定制微件中的信息量。定义应用微件的初始布局,在 XML 中定义。这是一个可选的 Activity,在用户添加您的应用微件时启动,并允许用户在应用微件创建时修改其设置。定义应用微件的基本特性,如应用微件的最小布局尺寸、应用微件的初始布局资源、应用微件的更新频率,以及(可选)在应用微件创建时启动的配置。与控制微件的互动不一定会转到关联的详情视图,具体取决于控制微件的功能是否生成了数据集(例如,在使用搜索微件时)。原创 2022-10-24 14:59:09 · 3152 阅读 · 0 评论 -
Android 11源码——驱动设备节点的权限问题
Android 11源码 驱动设备节点的权限问题原创 2022-09-29 15:00:58 · 2303 阅读 · 0 评论 -
Android 11源码——安全策略SELinux关闭
Android 11源码 安全策略SELinux关闭SELinux介绍背景关闭Android的SELinux临时关闭永久关闭SELinux介绍作为 Android 安全模型的一部分,Android 使用安全增强型 Linux (SELinux) 对所有进程强制执行强制访问控制 (MAC),甚至包括以 Root/超级用户权限运行的进程(Linux 功能)。借助 SELinux,Android 可以更好地保护和限制系统服务、控制对应用数据和系统日志的访问、降低恶意软件的影响,并保护用户免遭移动设备上的代码可原创 2022-08-23 17:06:24 · 4569 阅读 · 0 评论 -
Android 11源码——预置无源码apk到Android系统(带so文件)
模块名,可不用定义,默认=$(LOCAL_PACKAGE_NAME),不能和既有模块相同,如果该变量未设置,则使用LOCAL_PACKAGE_NAME,如果再没有,就会编译失败。经过对系统中存在的文件夹的访问测试,这种方式编译出来的APK所在进程的UID为system,可以参见Settings。例如LOCAL_MODULE,LOCAL_SRC_FILES,LOCAL_STATIC_LIBRARIES等等,但不清理LOCAL_PATH。testkey普通APK,默认情况下使用。...原创 2022-07-29 15:04:56 · 5295 阅读 · 3 评论 -
Android 深色模式适配
Android 深色模式适配Android 深色模式适配深色主题背景在应用中支持深色主题背景主题背景和样式Force Dark在视图上停用 Force DarkAndroid 10以上配置变更Android 深色模式适配深色主题背景Android 10 (API 级别 29) 及更高版本中提供深色主题背景。深色主题背景具有诸多优势:可大幅减少耗电量(具体取决于设备的屏幕技术)。为弱视以及对强光敏感的用户提高可视性。让所有人都可以在光线较暗的环境中更轻松地使用设备。深色主题背景同时适用于原创 2022-05-06 16:36:12 · 1787 阅读 · 0 评论 -
Android 11源码——预置无源码apk到Android系统
Android 11源码——预置无源码apk到Android系统在 packages/apps 下面以需要预置的 APK 名字创建文件夹,以预置一个名为 Test 的APK为例。将 Test.apk 放到 packages/apps/Test 下面。在 packages/apps/Test 下面创建文件 Android.mk,文件内容如下:LOCAL_PATH := $(call my-dir)include $(CLEAR_VARS)LOCAL_MODULE_TAGS := optional原创 2022-04-18 10:35:05 · 1543 阅读 · 2 评论 -
Android Studio JNI开发(三)——实现通过IIC协议控制硬件设备
Android Studio JNI开发(三)——实现通过IIC协议控制硬件设备新建Java JNI 类 MyJni.java,并编写JNI native方法。public class MyJNI { static { System.loadLibrary("jni_native"); } public static native String getStringFromNative(); public static native int Ope原创 2022-01-04 16:16:48 · 1896 阅读 · 0 评论 -
Android Studio JNI开发(二)——Java调用C方法输出字符串
Android Studio JNI开发(二)——Java调用C方法输出字符串新建Android项目在local.properties 文件配置ndk路径ndk.dir=D\:\\Android\\SDK\\ndk-bundleFile ----> Project Structure ----> SDK Lcation配置Android NDK location。gradle.properties文件配置兼容老的ndkandroid.useDeprec原创 2021-12-02 09:37:01 · 3356 阅读 · 1 评论 -
Android Studio JNI开发(一)——NDK安装及环境配置
Android Studio JNI开发(一)——NDK安装及环境配置简介JNIJNI(Java Native Interface),是Java和C/C++相互通信的接口,实现了一个工程,多种语言并存。在Android Framework中,需要提供一种媒介或桥梁,将Java层(上层)与C/C++层(下层)有机的联系起来,使得他们互相协调完成某些任务。而充当这种媒介的就是Java本地接口(JNI,Java Native Interface)。JNI提供一些列的接口,允许Java类与C/C++等本原创 2021-11-14 10:51:56 · 2376 阅读 · 0 评论 -
电脑重装系统以后,Android Studio出现Execution failed for task ‘:app:signingConfigWriterDebug‘问题
@TOC在电脑重装系统以后,出现Execution failed for task ':app:signingConfigWriterDebug’问题简介: 重装电脑系统后,安装最新版本Android Studio,打开之前的项目,运行时提示如下的错误:Execution failed for task ':MvcMvpMvvmDemo:signingConfigWriterDebug'.> java.nio.file.AccessDeniedException: D:\code\androi原创 2021-10-24 11:30:51 · 1078 阅读 · 0 评论 -
Android 仿通话来电界面
Android 仿通话来电界面**简介:**开发中需要模拟来电时的通话界面,仿照来电界面实现来电时播放铃声,界面通过动画模拟来电动效。效果图:自定义图片背景,图片由小变大的动态效果。shap_circle.xml<?xml version="1.0" encoding="utf-8"?><shape xmlns:android="http://schemas.android.com/apk/res/android"> <corners android原创 2021-09-23 17:07:35 · 1453 阅读 · 1 评论 -
Android 创建自己的依赖库,上传到Gitee并发布到JitPack提供引用
Android 创建自己的依赖库,上传到Gitee并发布到JitPack提供引用说明很多项目中,使用到的通讯模块代码都一样,为了避免代码的过多CV操作,减少代码的臃肿;一个项目中修改,所有项目需要更新,容易忘记修改。为了方便该模块的修改更新,方便在不同项目中使用,,将不同工程中,相同的通讯模块单独做成一个库。使用如下两种方式引用:方式一:把整个module文件夹复制到工程的根目录;在工程的settings.gradle中增加对module的引用。 由include ‘:app’变成inc原创 2021-08-09 18:17:49 · 1071 阅读 · 0 评论 -
Android 画中画(视频)
Android 画中画(视频)简介: Android 8.0(API 级别 26)允许以画中画 (PIP) 模式启动 Activity。画中画是一种特殊类型的多窗口模式,最常用于视频播放。使用该模式,用户可以通过固定到屏幕一角的小窗口观看视频,同时在应用之间进行导航或浏览主屏幕上的内容。画中画窗口会显示在屏幕的最上层,位于系统选择的一角。您可以将画中画窗口拖动到其他位置(会自动贴边)。当您点按该窗口时,会看到两个特殊的控件:全屏切换开关(位于窗口的中心)和关闭按钮(右上角的“X”)。效果图:声明原创 2021-07-30 17:25:28 · 1614 阅读 · 4 评论 -
Android 11源码 Framework修改默认usb连接模式为MTP模式
Android 11 Framework 修改默认usb连接模式为MTP模式 Android 11 Framework 修改默认usb连接模式为MTP模式修改Framework层源码编译修改后的源码更新到手机系统目标: 对Framework定制开发,修改Framework层代码,编译查看修改效果。本节我们修改USB默认选项,将USB默认充电模式改为默认MTP模式。效果图: 默认情况下USB选项为不进行数据传输:修改Framework层源码执行环境编译:cd ~/aospsource bu原创 2021-06-18 15:26:44 · 4138 阅读 · 7 评论 -
Android 11源码 Framework定制
Android 11源码 Framework定制 Android 11源码 Framework定制修改Framework层源码编译修改后的源码更新到手机系统目标: 对Framework定制开发,修改Framework层代码,编译查看修改效果。我们先从简单的添加log日志输出开始,一步步到修改逻辑。本节我们在系统服务(SystemService)启动前输出自己的日志。修改Framework层源码执行环境编译:cd ~/aospsource build/envsetup.shlunch原创 2021-06-16 13:42:32 · 1604 阅读 · 0 评论 -
Android 11源码 修改系统App后进行编译
Android 11源码 修改系统App后进行编译目标: 修改系统App源码,然后编译生成apk。我们在系统日历App中增加一个日志输出,然后编译生成apk,并安装查看修改效果。修改系统日历App源码进入系统日历App目录系统日历App源码在下载的Android 11源码下 /packages/app/Calendar/目录。Android11源码下载参考文章: Ubuntu 16.04下载编译Android11源码。cd ~/aosp/packages/app/Calendar用编原创 2021-06-15 20:53:11 · 4257 阅读 · 6 评论 -
Ubuntu 16.04下载编译Android11源码
Ubuntu 16.04下载编译Android11源码1. 硬件要求您的开发工作站必须达到或超出以下硬件要求:如果是 Android 2.3.x (Gingerbread) 及更高版本(包括 master 分支),需要 64 位环境。如果是较低的版本,则可以在 32 位系统中进行编译。如果要检出代码,至少需要 250 GB 可用磁盘空间;如果要进行构建,则还需要 150 GB。如果要进行多次构建,则需要更多空间。至少需要 16 GB 的可用 RAM/交换空间。2. 设置Linux构建环境1原创 2021-06-09 11:32:46 · 2606 阅读 · 4 评论 -
Android 应用快捷方式 Shortcuts(二)
Android 应用快捷方式 Shortcuts(二)简介: 快捷方式可帮助用户快速访问您的应用的某些部分,从而为他们呈现特定类型的内容。一次最多可以为应用发布五个快捷方式(静态和动态快捷方式加在一起),但大多数启动器只能显示四个。不过,用户可创建的应用固定快捷方式数量没有限制。应用无法移除固定快捷方式,但仍然可以停用它们。效果图:1. 快捷方式的类型:静态快捷方式:最适合在用户与应用互动的整个生命周期内使用一致结构链接到内容的应用。 由于大多数启动器一次只能显示四个快捷方式,因此静态快捷方式对常原创 2021-05-19 17:27:48 · 1287 阅读 · 1 评论 -
Android 应用快捷方式 Shortcuts(一)
Android 应用快捷方式 Shortcuts简介: 快捷方式可帮助用户快速访问您的应用的某些部分,从而为他们呈现特定类型的内容。一次最多可以为应用发布五个快捷方式(静态和动态快捷方式加在一起),但大多数启动器只能显示四个。不过,用户可创建的应用固定快捷方式数量没有限制。应用无法移除固定快捷方式,但仍然可以停用它们。效果图:快捷方式的类型:静态快捷方式:最适合在用户与应用互动的整个生命周期内使用一致结构链接到内容的应用。 由于大多数启动器一次只能显示四个快捷方式,因此静态快捷方式对常见 A原创 2021-04-09 09:38:47 · 948 阅读 · 1 评论 -
Android 画中画(图片)
Android 画中画一级目录二级目录三级目录一级目录二级目录三级目录原创 2021-03-31 14:56:47 · 1774 阅读 · 0 评论 -
Android 滑动拼图验证码控件
Android 滑动拼图验证码控件原创 2021-02-26 10:45:35 · 1055 阅读 · 0 评论 -
Android 全局悬浮框(可拖动)
Android 悬浮框原创 2021-01-25 17:20:44 · 7582 阅读 · 5 评论 -
Android全局异常处理
Android全局异常处理欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入欢迎使用Markdown编辑器你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用原创 2020-12-30 10:45:18 · 1032 阅读 · 0 评论 -
Android隐藏桌面图标,不显示应用图标
Android隐藏桌面图标,不显示应用图标隐藏桌面图标Android隐藏桌面图标,不显示应用图标隐藏桌面图标通过adb命令启动效果预览:如图所示,左图是默认安装app后,桌面上会显示一个应用图标。右图是增加隐藏桌面图标设置后安装的app,可以看到桌面上不会出现应用的图标,但是我们可以通过adb命令来启动应用。隐藏桌面图标为了隐藏app桌面图标,安装app后不在桌面上显示应用图标。我们可以通过添加<data>标签让启动app入口Activity申明为由接收隐式的Intent来启动,这样原创 2020-11-12 11:16:45 · 10013 阅读 · 0 评论 -
Android 圆角图片的实现
Android 圆角图片原创 2020-04-29 17:26:38 · 1334 阅读 · 1 评论 -
Android 检测实体按键事件并屏蔽
Android 检测实体按键事件并屏蔽效果图:新建服务类MyKeyEventService.java。用于监听电源键的触发。public class MyKeyEventService extends Service { @Nullable @Override public IBinder onBind(Intent intent) { ret...原创 2020-01-14 17:15:37 · 771 阅读 · 1 评论 -
Android 7.0以上系统获取文件拿不到正确路径,报错column-data-does-not-exist
Android 7.0以上系统获取文件拿不到正确路径,报错column-data-does-not-exist简介:上一篇文章【Android 选择文件并返回路径】中介绍了选择文件并返回文件路径的示例。使用过程中发现,Android 7.0以上系统通过手机自带的文件管理选择文件,程序崩溃,参考网上方法,优化选择文件的功能。效果图:文件选择器类public class Conten...原创 2020-01-02 16:56:14 · 2617 阅读 · 2 评论 -
Android 选择文件并返回路径
Android 选择文件并返回路径效果图:文件选择器类public class ContentUriUtil { /** * Get a file path from a Uri. This will get the the path for Storage Access * Framework Documents, as well as the _da...原创 2019-12-12 15:34:01 · 4970 阅读 · 3 评论