自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(68)
  • 资源 (3)
  • 收藏
  • 关注

原创 安卓 SystemServer 启动流程

可以看到PowerManagerService先于AudioService启动,此时如果在PowerManagerService启动后立刻调用AudioService中的接口就会引发 JE 崩溃,进而导致system_server崩溃。

2024-12-25 16:13:58 1449

原创 安卓系统新增 SettingsProvider 属性

SettingsProvider的数据保存在文件/data/system/users/0/settings_***.xml和数据库settings.db中;其中settings_global.xml 、settings_secure.xml 、settings_system.xml 、即对应/frameworks/base/core/java/android/provider/Settings.java中的三个内部类:Global、Secure、System。3. 添加系统默认值1h(3600000)

2024-12-25 15:16:36 913

原创 安卓音频之dumpsys audio

除了音频日志,当前的音频状态。音量,通话模式,可用音频设备,以及音频设置历史等都在AudioService中。而混音状态是在AudioFlinger中。在音频问题定位中,这些信息是很有必要的。

2024-12-24 17:02:47 1179

原创 安卓蓝牙扫描流程

扫描开启广播:BluetoothAdapter.ACTION_DISCOVERY_STARTED = "android.bluetooth.adapter.action.DISCOVERY_STARTED";扫描关闭广播:BluetoothAdapter.ACTION_DISCOVERY_FINISHED = "android.bluetooth.adapter.action.DISCOVERY_FINISHED";

2024-12-24 15:45:50 1370

原创 Android BT 扫描时长控制

安卓原生蓝牙扫描开始、完成广播,扫描时长控制

2024-12-23 10:43:56 223

原创 AI-基于sherpa-onnx集成各SST、ASR、TTS模型

基于sherpa-onnx集成各SST、ASR、TTS模型并在安卓平台上运行

2024-12-23 10:03:08 843

原创 增加日志定位toast来源

安卓系统集成应用有时会遇到莫名的toast弹框,不清楚是哪个应用,可能频繁弹框影响体验,需要定位来源。终端未接U盘,却弹出如上toast,需要定位分析来源。在handleShow中增加合适的打印。

2024-12-03 20:27:43 248

原创 新增白名单赋予应用安装权限

安装app到/data/分区时,如何在安装阶段就赋予权限,无需请求权限。

2024-12-03 16:58:30 433

转载 Audio-默认、最大、最小音量

Android系统拥有多媒体、通话、通知等声音属性,这些声音属性分别含有自己默认音量、最大音量和最小音量属性。下面介绍这些声音属性的音量定义和它们的修改方式。

2024-12-03 16:44:27 131

原创 PMS-APK安装跳过未知应用授权

注释掉// AppOpsManager.MODE_DEFAULT, // REQUEST_INSTALL_PACKAGES, 改为 AppOpsManager.MODE_ALLOWED。逻辑会走到createDialog中的case DLG_EXTERNAL_SOURCE_BLOCKED,可以在此做判断,直接安装。可以根据实际情况选择initiateInstall() 或者 startInstall() 决定是否显示确认安装提示框。应用APK在线升级时需要设置允许安装后才可以进行安装,建议允许直接安装。

2024-12-02 15:12:04 452

原创 Crash-SQLiteDiskIOException

蓝牙wifi无法使用:当设备上的可用存储空间不足时,SQLite无法完成磁盘I/O操作,从而导致。:如果数据库文件被意外修改或损坏,可能会导致这个错误。:在多线程或多进程环境中,如果多个操作同时访问数据库文件,可能会发生数据库锁冲突,导致。:当SQLite尝试读取或写入数据时,如果底层存储设备(如硬盘或闪存)出现故障,就会导致该错误的发生。这可能是由于物理硬件问题、错误的驱动程序或不正常的电源断电等原因引起的。

2024-12-02 14:33:42 354

转载 C语言可变参数函数

有时,可能会碰到这样的情况,希望函数带有可变数量的参数,而不是预定义数量的参数。下面的实例演示了这种函数的定义。int func(int, ... ) { . . .} int main(){ func(2, 2, 3); func(3, 2, 3, 4);}请注意,函数func()最后一个参数写成省略号,即三个点号(...),省略号之前的那个参数是int,代表了要传递的可变参数的总数。为了使用这个功能,需要使用stdarg.h头文件,该文件提供...

2022-04-16 17:24:31 517

转载 C语言递归用法

目录数的阶乘斐波那契数列递归指的是在函数的定义中使用函数自身的方法。语法格式如下:void recursion(){ statements; ... ... ... recursion(); /* 函数调用自身 */ ... ... ...} int main(){ recursion();}C 语言支持递归,即一个函数可以调用其自身。但在使用递归时,程序员需要注意定义一个从函数退出的条件,否则会进入死循环。递归函数在解决许多数学问题上

2022-04-16 16:48:07 1054

转载 C语言错误处理

C 语言不提供对错误处理的直接支持,但是作为一种系统编程语言,它以返回值的形式允许访问底层数据。在发生错误时,大多数的 C 或 UNIX 函数调用返回 1 或 NULL,同时会设置一个错误代码errno,该错误代码是全局变量,表示在函数调用期间发生了错误。可以在 errno.h 头文件中找到各种各样的错误代码。所以,C 程序员可以通过检查返回值,然后根据返回值决定采取哪种适当的动作。开发人员应该在程序初始化时,把 errno 设置为 0,这是一种良好的编程习惯。0 值表示程序中没有错误。errno.

2022-04-16 16:28:44 491

转载 C语言强制类型转换

强制类型转换是把变量从一种类型转换为另一种数据类型。例如,如果想存储一个 long 类型的值到一个简单的整型中,需要把 long 类型强制转换为 int 类型。可以使用强制类型转换运算符来把值显式地从一种类型转换为另一种类型,如下所示:(type_name) expression请看下面的实例,使用强制类型转换运算符把一个整数变量除以另一个整数变量,得到一个浮点数:#include <stdio.h> int main(){ int sum = 17, count =

2022-04-16 16:06:59 11886

转载 C语言头文件

头文件是扩展名为 .h 的文件,包含了 C语言 函数声明和宏定义,被多个源文件中引用共享。有两种类型的头文件:程序员编写的头文件和编译器自带的头文件。在 C 或 C++ 程序中,建议把所有的常量、宏、系统全局变量和函数原型写在头文件中,在需要的时候随时引用这些头文件。引用头文件的语法#include <file>这种形式用于引用系统头文件。它在系统目录的标准列表中搜索名为 file 的文件。在编译源代码时,可以通过 -I 选项把目录前置在该列表前。#include "file

2022-04-16 15:41:11 2303

转载 C语言预处理器

目录预定义宏预处理器运算符参数化的宏程序编译过程为:预处理,编译,汇编,链接预处理器是一个文本替换工具而已,它们会指示编译器在实际编译之前完成所需的预处理。把 C 语言预处理器(C Preprocessor)简写为 CPP。所有的预处理器命令都是以井号(#)开头。它必须是第一个非空字符,为了增强可读性,预处理器指令应从第一列开始。下面列出了所有重要的预处理器指令:指令 描述 #define 定义宏 #include 包含一个源代码文件 #undef

2022-04-11 15:12:52 324

转载 C语言的文件读写函数

目录打开文件关闭文件写入文件读取文件二进制 I/O 函数打开文件fopen( )函数来创建一个新的文件或者打开一个已有的文件,这个调用会初始化类型FILE的一个对象,类型FILE包含了所有用来控制流的必要的信息。下面是这个函数调用的原型:FILE *fopen( const char * filename, const char * mode );其中,filename是文件名,访问模式mode值可以是下列值中的一个:模式 描述 r ...

2022-04-01 20:20:24 4149 1

转载 C语言输入输出函数

目录标准文件getchar() & putchar() 函数gets() & puts() 函数scanf() 和 printf() 函数标准文件C 语言把所有的设备都当作文件。所以设备(比如显示器)被处理的方式与文件相同。以下三个文件会在程序执行时自动打开,以便访问键盘和屏幕。标准文件 文件指针 设备 标准输入 stdin 键盘 标准输出 stdout 屏幕 标准错误 stderr 您的屏幕 get

2022-03-31 21:11:12 1482

转载 C语言 typedef 关键字

C 语言提供了 typedef 关键字,可以使用它来为类型取一个新的名字。下面的实例为单字节数字定义了一个术语 BYTE:typedef unsigned char BYTE;在这个类型定义之后,标识符 BYTE 可作为类型 unsigned char 的缩写,例如:BYTE b1, b2;按照惯例,定义时会大写字母,以便提醒用户类型名称是一个象征性的缩写,但也可以使用小写字母,如下:typedef unsigned char byte;也可以使用typedef来为用户自..

2022-03-29 11:08:39 1288

转载 C语言位域

目录位域声明位域的定义和位域变量的说明位域声明有些信息在存储时,并不需要占用一个完整的字节(一个字节8位),而只需占几个或一个二进制位。例如在存放一个开关量时,只有 0 和 1 两种状态,用 1 位二进位即可。为了节省存储空间,并使处理简便,C 语言又提供了一种数据结构,称为"位域"或"位段"。所谓"位域"是把一个字节中的二进位划分为几个不同的区域,并说明每个区域的位数。每个域有一个域名,允许在程序中按域名进行操作。这样就可以把几个不同的对象用一个字节的二进制位域来表示。典型的实例:

2022-03-25 17:41:32 288

转载 C语言共用体

共用体是一种特殊的数据类型,允许您在相同的内存位置存储不同的数据类型。您可以定义一个带有多成员的共用体,但是任何时候只能有一个成员带有值。共用体提供了一种使用相同的内存位置的有效方式。定义共用体为了定义共用体,您必须使用union语句,方式与定义结构类似。union 语句定义了一个新的数据类型,带有多个成员。union 语句的格式如下:union [union tag]{ member definition; member definition; ... memb..

2022-03-24 21:19:27 289

转载 C语言结构体

目录结构体定义结构体变量的初始化访问结构成员结构体作为函数参数指向结构的指针结构体定义定义结构,必须使用 struct 语句。struct tag { member-list member-list member-list ...} variable-list ;tag是结构体标签。 member-list是标准的变量定义,比如 int i; 或者 float f,或者其他有效的变量定义。 variable-list...

2022-03-24 20:48:20 149

原创 C语言字符串处理函数

C语言中头文件<string.h>,C++中头文件<string>序号 函数 & 目的 1 strcpy(s1, s2); 复制字符串 s2 到字符串 s1。 2 strncpy(s1, s2, n); 复制字符串 s2 前 n 个字符到字符串 s1。 3 strcat(s1, s2); 连接字符串 s2 到字符串 s1 的末尾。 4 strncat(s1, s2, n); 连接字符串 s2 前 n 个

2022-03-21 14:18:31 804

转载 C语言字符串长度

在 C 语言中,字符串实际上是使用空字符 \0 结尾的一维字符数组。因此,\0 是用于标记字符串的结束。空字符(Null character)又称结束符,缩写 NUL,是一个数值为 0 的控制字符,\0 是转义字符,意思是告诉编译器,这不是字符 0,而是空字符。下面的声明和初始化创建了一个 RUNOOB 字符串。由于在数组的末尾存储了空字符 \0,所以字符数组的大小比单词 RUNOOB 的字符数多一个。char site[7] = {'R', 'U', 'N', 'O', 'O', 'B', '\

2022-03-10 21:17:21 2632

转载 C语言函数指针与回调函数

目录函数指针回调函数函数指针函数指针是指向函数的指针变量。通常我们说的指针变量是指向一个整型、字符型或数组等变量,而函数指针是指向函数。函数指针可以像一般函数一样,用于调用函数、传递参数。函数指针变量的声明:typedef int (*fun_ptr)(int,int); // 声明一个指向同样参数、返回值的函数指针类型实例以下实例声明了函数指针变量 p,指向函数 max:#include <stdio.h> int max(int x, in

2022-03-10 20:44:05 150

转载 C语言传递指针给函数

C 语言允许传递指针给函数,只需要简单地声明函数参数为指针类型即可。下面的实例中,我们传递一个无符号的 long 型指针给函数,并在函数内改变这个值:实例#include <stdio.h>#include <time.h> void getSeconds(unsigned long *par);int main (){ unsigned long sec; getSeconds( &sec ); /* 输出实际值 */

2022-03-04 11:02:41 3386

转载 C语言指向指针的指针

简介指向指针的指针是一种多级间接寻址的形式,或者说是一个指针链。通常,一个指针包含一个变量的地址。当我们定义一个指向指针的指针时,第一个指针包含了第二个指针的地址,第二个指针指向包含实际值的位置。一个指向指针的指针变量必须如下声明,即在变量名前放置两个星号。例如,下面声明了一个指向 int 类型指针的指针:int **var;当一个目标值被一个指针间接指向到另一个指针时,访问这个值需要使用两个星号运算符,如下面实例所示:实例#include <stdio.h>

2022-03-02 22:25:31 770 1

转载 C语言指针的算术运算

C 指针是一个用数值表示的地址。因此,您可以对指针执行算术运算。可以对指针进行四种算术运算:++、--、+、-。假设ptr是一个指向地址 1000 的整型指针,是一个 32 位的整数,让我们对该指针执行下列的算术运算:ptr++在执行完上述的运算之后,ptr将指向位置 1004,因为 ptr 每增加一次,它都将指向下一个整数位置,即当前位置往后移 4 字节。这个运算会在不影响内存位置中实际值的情况下,移动指针到下一个内存位置。如果ptr指向一个地址为 1000 的字符,上面的运算会导...

2022-03-01 16:09:12 863

转载 C语言指针数组

目录引言简介引言讲解指针数组的概念之前,来看一个实例,它用到了一个由 3 个整数组成的数组:#include <stdio.h> const int MAX = 3; int main (){ int var[] = {10, 100, 200}; int i; for (i = 0; i < MAX; i++) { printf("Value of var[%d] = %d\n", i, var[i] );

2022-02-28 21:34:39 707

转载 C语言指针简介及NULL指针

目录简介什么是指针?如何使用指针?NULL 指针简介通过指针,可以简化一些编程任务的执行,还有一些任务,如动态内存分配,没有指针是无法执行的。每一个变量都有一个内存位置,每一个内存位置都定义了可使用 & 运算符访问的地址,它表示了在内存中的一个地址。请看下面的实例,它将输出定义的变量地址:实例#include <stdio.h> int main (){ int var_runoob = 10; int *p; .

2022-02-26 20:48:53 363

原创 Windows系统如何远程桌面连接

简介远程桌面是异地开发、调试中是非常重要的功能,除市面上常用的第三方软件如 TeamViewer、向日葵等,Windows系统也自带了远程桌面连接功能。步骤1. 搜索栏搜索远程桌面连接,或者Windows+r...

2022-02-25 16:59:36 9956 1

转载 C语言enum(枚举)的用法

简介枚举语法定义格式为:enum 枚举名 {枚举元素1,枚举元素2,……};接下来举个例子,比如:一星期有 7 天,如果不用枚举,需要使用 #define 来为每个整数定义一个别名:#define MON 1#define TUE 2#define WED 3#define THU 4#define FRI 5#define SAT 6#define SUN 7这个看起来代码量就比较多,接下来看看使用枚举的方式:enum DAY{ MON

2022-02-22 20:13:14 1274 1

转载 C语言指向数组的指针用法

简介数组名是一个指向数组中第一个元素的常量指针。因此,在下面的声明中:double balance[50];balance是一个指向 &balance[0] 的指针,即数组 balance 的第一个元素的地址。因此,下面的程序片段把p赋值为balance的第一个元素的地址:double *p;double balance[10];p = balance;使用数组名作为常量指针是合法的,反之亦然。因此,*(balance + 4) 是一种访问 balance[4...

2022-02-22 15:28:28 394

转载 C语言从函数返回数组

C 语言不允许返回一个完整的数组作为函数的参数。但是,可以通过指定不带索引的数组名来返回一个指向数组的指针。如果想要从函数返回一个一维数组,必须声明一个返回指针的函数,如下:int * myFunction(){...}另外,C 不支持在函数外返回局部变量的地址,除非定义局部变量为 static 变量。现在,让我们来看下面的函数,它会生成 10 个随机数,并使用数组来返回它们,具体如下:实例#include <stdio.h>#include <stdl

2022-02-22 10:14:48 12168

转载 C语言传递数组给函数方式

目录方式 1方式 2方式 3实例如果想要在函数中传递一个一维数组作为参数,您必须以下面三种方式来声明函数形式参数,这三种声明方式的结果是一样的,因为每种方式都会告诉编译器将要接收一个整型指针。同样地,您也可以传递一个多维数组作为形式参数。方式 1形式参数是一个指针:void myFunction(int *param){...}方式 2形式参数是一个已定义大小的数组:void myFunction(int param[10]){...}

2022-02-21 20:38:50 11711

转载 C语言多维数组的初始化

C 语言支持多维数组。多维数组声明的一般形式如下:type name[size1][size2]...[sizeN];例如,下面的声明创建了一个三维 5 . 10 . 4 整型数组:int threedim[5][10][4];二维数组下面是一个二维数组,包含 3 行和 4 列:int x[3][4];因此,数组中的每个元素是使用形式为 a[ i , j ] 的元素名称来标识的,其中 a 是数组名称,i 和 j 是唯一标识 a 中每个元素的下标。初始化二维数组多

2022-02-21 20:25:03 4393

转载 C语言作用域规则

简介任何一种编程中,作用域是程序中定义的变量所存在的区域,超过该区域变量就不能被访问。C 语言中有三个地方可以声明变量:在函数或块内部的局部变量 在所有函数外部的全局变量 在形式参数的函数参数定义中两点注意在程序中,局部变量和全局变量的名称可以相同,但是在函数内,如果两个名字相同,会使用局部变量值,全局变量不会被使用。 函数的参数,形式参数,被当作该函数内的局部变量,如果与全局变量同名它们会优先使用。实例#include <stdio.h> /*

2022-02-18 16:48:20 447

原创 C语言标准库-<stdbool.h>-bool型头文件

用法在最新的 C 语言标准(C99)解决了布尔类型的问题。C99 提供了 _Bool 型,所以布尔类型可以声明为 _Bool flag。_Bool 依然仍是整数类型,但与一般整型不同的是,_Bool 变量只能赋值为 0 或 1,非 0 的值都会被存储为 1。C99还提供了一个头文件 <stdbool.h> 定义了 bool 代表 _Bool,true 代表 1,false 代表 0。只要导入 stdbool.h ,就能非常方便的操作布尔类型了。//导入 stdbool.h 来使用布尔类

2022-02-16 16:09:41 19110 1

原创 C语言变量的声明与定义区别

目录定义声明区别定义变量定义就是告诉编译器在何处创建变量的存储,以及如何创建变量的存储。变量定义指定一个数据类型,并包含了该类型的一个或多个变量的列表,如下所示:type variable_list;在这里,type 必须是一个有效的 C 数据类型,可以是 char、w_char、int、float、double 或任何用户自定义的对象,variable_list 可以由一个或多个标识符名称组成,多个标识符之间用逗号分隔。变量可以在声明的时候被初始化(指定一个初始值)。初始

2022-02-16 14:48:47 695 1

此打包工具在windows10 64位版下测试通过。可以对安卓10或以下的system.img进行打包。支持超大img打包

此打包工具在windows10 64位版下测试通过。可以对安卓10或以下的system.img进行打包。支持超大img打包

2022-03-03

代码阅读神器——Sourceinsight4

代码阅读神器——Sourceinsight4 适用C、C++、ASM、PAS、ASP、HTML等常用语言的阅读及编辑 功能强大,小巧方便,解压即用

2022-01-18

stm32与android平板之间的连接

stm32与android平板之间的连接,可实现stm32发送数据在平板上的显示

2018-08-17

空空如也

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

TA关注的人

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