Android关于service call 直接调用方法分析

1 背景

希望通过命令的方式控制蓝牙打开与关闭,通过网上搜索我们都能搜到

//打开蓝牙
adb shell service call bluetooth_manager 6
//关闭蓝牙
adb shell service call bluetooth_manager 8
  • 其中运用到的就是service call,其机制是通过 Android 的 Binder 机制来实现的。
  • Android 系统中的各种服务和应用都可以通过 Binder 机制提供自己的接口,其他的应用或者系统组件 可以通过 Binder 来调用这些接口,实现跨进程通信和调用远程服务的功能。
  • 当使用 “service call” 命令时,实际上是通过 Binder 机制找到对应的系统服务,并调用这个服务的方法。命令的参数会被传递给对应的方法,从而实现特定的功能。

2 分析

2.1 查阅代码可知,打开蓝牙使用

./frameworks/base/services/core/java/com/android/server/BluetoothManagerService.java

在这里插入图片描述
因此铁定是server call 调用了enable因此打开了蓝牙功能

2.2 service list 查找 bluetooth 服务对应的 aidl

firefly_3399:/ # service list | grep "bluetooth"
11      bluetooth_manager: [android.bluetooth.IBluetoothManager]

2.3 代码中找到IBluetoothManager.aidl

fireflyserver:~/android/rk3399/industry-7.1$ find ./frameworks/base/  -name "IBluetoothManager.aidl"
./frameworks/base/core/java/android/bluetooth/IBluetoothManager.aidl

2.4 查阅IBluetoothManager.aidl

interface IBluetoothManager
 {
 ....
    IBluetooth registerAdapter(in IBluetoothManagerCallback callback);
     void unregisterAdapter(in IBluetoothManagerCallback callback);
     void registerStateChangeCallback(in IBluetoothStateChangeCallback callback);
     void unregisterStateChangeCallback(in IBluetoothStateChangeCallback callback);
     boolean isEnabled(); 
     boolean enable(String packageName); // 6
	 boolean enableNoAutoConnect(String packageName);
     boolean disable(String packageName, boolean persist); // 8
     int getState();
    IBluetoothGatt getBluetoothGatt();
....

很明显这个编号就是6是enable,8是disable,符合预期

3 延伸service用法

Usage: service [-h|-?]
       service list
       service check SERVICE
       service call SERVICE CODE [i32 N | i64 N | f N | d N | s16 STR ] ...
Options:
// i32 N: 表示将一个32位整数N写入发送包中。您可以使用这个选项来向系统服务的方法传递一个32位整数类型的参数。
   i32: Write the 32-bit integer N into the send parcel.
//i64 N: 表示将一个64位整数N写入发送包中。类似地,这个选项用于向系统服务的方法传递一个64位整数类型的参数。
   i64: Write the 64-bit integer N into the send parcel.
//f N: 表示将一个32位单精度浮点数N写入发送包中。您可以使用这个选项来向系统服务的方法传递一个单精度浮点数类型的参数。
   f:   Write the 32-bit single-precision number N into the send parcel.
//d N: 表示将一个64位双精度浮点数N写入发送包中。类似地,这个选项用于向系统服务的方法传递一个双精度浮点数类型的参数。
   d:   Write the 64-bit double-precision number N into the send parcel.
//s16 STR: 表示将一个UTF-16字符串STR写入发送包中。您可以使用这个选项来向系统服务的方法传递一个UTF-16格式的字符串参数。
   s16: Write the UTF-16 string STR into the send parcel.

service call 可以增加输入参数,但是无法获取返回值,例如这样运行,packageName就是firefly

service call bluetooth_manager 6 s16 firefly
05-27 10:56:10.949   479   884 D BluetoothManagerService: enable(firefly):  mBluetooth =android.bluetooth.IBluetooth$Stub$
Proxy@3862774 mBinding = false mState = ON

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/649206.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

vue3 3D炫酷模型banner图

项目场景&#xff1a; 在官网首页展示3D炫酷动画模型&#xff0c;让整个模型都展示出来。 问题描述 主要是3D动画的展示效果&#xff0c;有些3d模型网站可以从51建模网站中获取。 案例代码&#xff1a; <script setup> import * as imgs from ../units/img import { o…

融资融券保证金比例,融资融券最低利率4.0%

融资融券保证金比例是指投资者交付的保证金与融资、融券交易金额的比例&#xff0c;用于控制投资者初始资金的放大倍数。这个比例分为融资保证金比例和融券保证金比例。 融资融券保证金比例的计算 1. 融资保证金比例是指投资者融资买入证券时交付的保证金与融资交易金额的比例…

穿越时空的工厂之旅:探索可视化三维场景的奥秘

在科技日新月异的今天&#xff0c;我们似乎总是在不断追求着更加高效、智能的生产方式。 传统的工厂管理方式往往依赖于平面图纸、纸质文档和现场巡查&#xff0c;这不仅效率低下&#xff0c;而且容易出错。而三维可视化技术通过3D建模和虚拟现实技术&#xff0c;将工厂内部的各…

苗情灾情监控系统—提高农业生产效率

TH-MQ2苗情灾情监控系统是一种用于监测农作物生长状况和灾情的设备&#xff0c;通过实时监测和数据分析&#xff0c;帮助农民及时了解作物生长情况&#xff0c;采取相应的管理措施&#xff0c;提高农业生产效率和降低生产成本。 该系统通常由多种传感器、摄像头、数据传输模块等…

【项目问题解决】 java.lang.IllegalArgumentException: XML fragments parsed

java.lang.IllegalArgumentException: XML fragments parsed from previous mappers does not contain value for com.xxx.xxx.xxx.xxx.dao.SingleApasInfoDao.selectListCondition 目录 【项目问题解决】 java.lang.IllegalArgumentException: XML fragments parsed from pr…

【机器学习】Python中的决策树算法探索

&#x1f308;个人主页: 鑫宝Code &#x1f525;热门专栏: 闲话杂谈&#xff5c; 炫酷HTML | JavaScript基础 ​&#x1f4ab;个人格言: "如无必要&#xff0c;勿增实体" 文章目录 Python中的决策树算法探索引言1. 决策树基础理论1.1 算法概述1.2 构建过程 2. P…

AI大模型探索之路-实战篇8:多轮对话与Function Calling技术应用

系列篇章&#x1f4a5; AI大模型探索之路-实战篇4&#xff1a;深入DB-GPT数据应用开发框架调研 AI大模型探索之路-实战篇5&#xff1a;探索Open Interpreter开放代码解释器调研 AI大模型探索之路-实战篇6&#xff1a;掌握Function Calling的详细流程 AI大模型探索之路-实战篇7…

数据结构的直接插入排序(C语言版)

一.直接插入排序的基本概念 1.直接插入排序的基本思想 将数组分为已排序和未排序两部分。 每次从未排序部分取出一个元素,将其插入到已排序部分的合适位置,使得已排序部分保持有序。 重复步骤2,直到整个数组有序。 2.排序的工作原理 假设前 i-1 个元素已经有序,现在要将第…

基于微信小程序+ JAVA后端实现的【医院挂号预约系统】 设计与实现 (内附设计LW + PPT+ 源码+ 演示视频 下载)

项目名称 项目名称&#xff1a; 《基于微信小程序的医院挂号预约系统设计与实现》 项目技术栈 该项目采用了以下核心技术栈&#xff1a; 后端框架/库&#xff1a; Java, SSM框架数据库&#xff1a; MySQL前端技术&#xff1a; 微信小程序, uni-app 项目展示 全文概括 本…

Linux_应用篇(09) 进程

本章将讨论进程相关的知识内容&#xff0c; 虽然在前面章节内容已经多次向大家提到了进程这个概念&#xff0c;但并未真正地向大家解释这个概念&#xff1b;在本章&#xff0c;我们将一起来学习 Linux 下进程相关的知识内容&#xff0c;虽然进程的基本概念比较简单&#xff0c;…

Tensors张量操作

定义Tensor 下面是一个常见的tensor&#xff0c;包含了里面的数值&#xff0c;属性&#xff0c;以及存储位置 tensor([[0.3565&#xff0c;0.1826&#xff0c;0.6719],[0.6695&#xff0c;0.5364&#xff0c;0.7057]]&#xff0c;dtypetorch.float32,devicecuda:0)Tensor的属…

【动态规划】零基础解决路径问题(C++)

目录 62.路径问题 解法&#xff08;动态规划&#xff09;&#xff1a; 1. 状态表⽰&#xff1a; 2. 状态转移⽅程&#xff1a; 3. 初始化&#xff1a; 4. 填表顺序&#xff1a; 5. 返回值&#xff1a; 不同路径2.0 解法&#xff08;动态规划&#xff09;&#xff1a; …

LLM中的RoPE位置编码代码解析与RoPE的性质分析(一)

本博客需要对位置编码有一定了解&#xff0c;但不熟悉代码实现的老哥看。 正弦位置编码&#xff08;sinusoidal&#xff09; 在介绍RoPE之前&#xff0c;先回顾一下正弦位置编码。 数学表达 P E ( p o s , 2 i ) s i n ( p o s 1000 0 2 i / d m o d e l ) PE(pos, 2i) sin…

行转列——kettle开发14

一、行转列 如图所示&#xff0c;行转列就是把数据字段的字段名转换为一列&#xff0c;把数据行变成数据列。即我们将昨天输出的张三在周一至周日的工作小时转换为7行数据。对应7行数据分别为张三在周一工作多个小时&#xff0c;在周二工作多少个小时等等。 我们来看下行转列组…

怎么设置电脑锁屏密码?一键给你的电脑“上锁”

在保护个人电脑安全方面&#xff0c;设置锁屏密码是一种简单而有效的方法。无论是在家里还是在公共场所&#xff0c;锁屏密码都可以有效防止他人未经授权访问您的电脑&#xff0c;保护您的隐私和数据安全。 然而&#xff0c;对于一些新手用户来说&#xff0c;怎么设置电脑锁屏…

期货学习笔记-横盘行情学习1

横盘行情的特征及分类 横盘行情的概念 横盘行情时中继形态的一种&#xff0c;一般常出现在大涨或大跌之后出现横盘行情是对当前趋势行情的修正&#xff0c;是对市场零散筹码的清理&#xff0c;是为了集中筹码更便于后期行情的展开 横盘行情的特征 1.水平运动&#xff1a;该…

Java基础-反射原理

总结放前面&#xff1a; 反射是可以通过一个类对象或类名称获取到该类的全部信息&#xff08;属性和方法&#xff09;&#xff0c;包括为权限为private。 要使用反射第一步&#xff0c;要获取的类的Class对象&#xff0c;该Class对象存放在堆区&#xff0c;于类加载时创建&…

互联网政务应用安全管理规定:使用安全连接方式访问

前几日&#xff0c;由中央网络安全和信息化委员会办公室、中央机构编制委员会办公室、工业和信息化部、公安部等4部门联合制定的《互联网政务应用安全管理规定》&#xff08;以下简称规定&#xff09;发布了&#xff0c;规定定义了互联网政务应用&#xff0c;也对互联网政务应用…

[GDB] GDB调试

目录 一 简介 二 功能: 三 命令: 四 调试准备: 五 开始调试: 5.1 添加断点&#xff1a; 5.2 条件编译 5.3 断点查看 5.4 断点删除: 5.5 查看源码 5.6 单步调试(逐过程)&#xff1a; 5.7 断点调试: 5.8 单步跟踪(逐语句): 5.9 调试过程&#xff1a; 5.9.1 开始调…

一屏万象,场景无限:蓝牙墨水屏标签多功能多场景应用带您领略未来

在数字化浪潮汹涌澎湃的今天&#xff0c;智能科技产品层出不穷&#xff0c;它们不仅极大地改变了我们的生活方式&#xff0c;更在无形中拓宽了我们的视野。而今&#xff0c;一款融合了创新技术与实用性于一体的蓝牙墨水屏标签&#xff0c;正以其多功能多场景应用的特性&#xf…