当前位置: 首页 > news >正文

高通Android 12/13实现USB拔出关机功能

思路流程

1、监听广播->接受USB断开或者USB不充电广播->执行关机逻辑

涉及类 UsbManager/UsbDeviceManager

\frameworks\base\services\usb\java\com\android\server\usb\UsbDeviceManager.java

\frameworks\base\services\com\android\hardware\usb\UsbManager.java

2、自定义系统服务Service接收Intent.ACTION_POWER_DISCONNECTED广播代码逻辑

mContentResolver = mContext.getContentResolver();/**mUsbReceiver = new BroadcastReceiver() {@Overridepublic void onReceive(Context context, Intent intent) {Log.e("ZM","Receiver USBMode SHUTDOWN BroadcastReceiver Action="+intent.getAction());if (Intent.ACTION_POWER_DISCONNECTED.equals(intent.getAction()) || UsbManager.ACTION_USB_DEVICE_DETACHED.equals(intent.getAction())) {Log.e("ZM","Receiver USBMode SHUTDOWN BroadcastReceiver");handleUsbDisconnected();}}};**/IntentFilter filter = new IntentFilter();filter.addAction(Intent.ACTION_POWER_DISCONNECTED);mContext.registerReceiver(mUsbReceiver, filter);

3、 handleUsbDisconnected()具体实现逻辑如下所示

private void handleUsbDisconnected() {int usbPlugShutdown = Settings.Global.getInt(mContentResolver, USB_PLUG_SHUTDOWN_KEY, 0);Log.e("handleUsbDisconnected","usbplugShutdown="+usbPlugShutdown);if(usbPlugShutdown == 1 ){Log.e("handleUsbDisconnected","device shutdown");shutdown();			   }}

4、设置USB拔出关机模式 代码如下图所示

  /*** 设置USB模式** @param mode*/public void setUSBMode(int mode) {//isSettingUsbMode = true; // 设置完成后将标志恢复为 falseUsbManager mUsbManager = (UsbManager) mContext.getSystemService(UsbManager.class);if(mUsbManager != null){Log.e("ZM","=========setUSBMode============="+mode);mUsbManager.setCurrentFunctions((long) mode);// Log.e("tian getUSBMode::::::::::" + String.valueOf(mUsbManager.getCurrentFunctions()));//isSettingUsbMode = false; // 设置完成后将标志恢复为 false}}

5、获取USB拔出关机模式状态 代码如下图所示

/*** 获取USB模式** @return*/public int getUSBMode() {UsbManager mUsbManager = (UsbManager) mContext.getSystemService(UsbManager.class);if(mUsbManager != null){Log.e("ZM","=========getUSBMode============="+(int) mUsbManager.getCurrentFunctions());return (int) mUsbManager.getCurrentFunctions();}return 0;}

6、设置USB拔出关机和不关机adb指令 

adb shell settings put global usb_plug_shutdown 0 //设置USB拔出不关机db shell settings put global usb_plug_shutdown  1 //设置USB拔出关机adb shell settings get global usb_plug_shutdown 获取USB拔出状态值

7、感兴趣可以去了解USB模式 UsbDeviceManager 打印 mCurrentFunctions值

  protected void updateUsbStateBroadcastIfNeeded(long functions) {// send a sticky broadcast containing current USB stateIntent intent = new Intent(UsbManager.ACTION_USB_STATE);intent.addFlags(Intent.FLAG_RECEIVER_REPLACE_PENDING| Intent.FLAG_RECEIVER_INCLUDE_BACKGROUND| Intent.FLAG_RECEIVER_FOREGROUND);intent.putExtra(UsbManager.USB_CONNECTED, mConnected);//zm fixSlog.d(TAG, "ZM skip updateUsbStateBroadcastIfNeeded " + mConnected +"mCurrentFunctions="+(int)mCurrentFunctions);intent.putExtra(UsbManager.USB_HOST_CONNECTED, mHostConnected);intent.putExtra(UsbManager.USB_CONFIGURED, mConfigured);intent.putExtra(UsbManager.USB_DATA_UNLOCKED,isUsbTransferAllowed() && isUsbDataTransferActive(mCurrentFunctions));long remainingFunctions = functions;while (remainingFunctions != 0) {intent.putExtra(UsbManager.usbFunctionsToString(Long.highestOneBit(remainingFunctions)), true);remainingFunctions -= Long.highestOneBit(remainingFunctions);}// send broadcast intent only if the USB state has changedif (!isUsbStateChanged(intent)) {if (DEBUG) {Slog.d(TAG, "skip broadcasting " + intent + " extras: " + intent.getExtras());}return;}if (DEBUG) Slog.d(TAG, "broadcasting " + intent + " extras: " + intent.getExtras());sendStickyBroadcast(intent);mBroadcastedIntent = intent;}

8、到这里结束了,转载请注明出处高通Android 12/13实现USB拔出关机功能-CSDN博客,谢谢!

相关文章:

高通Android 12/13实现USB拔出关机功能

思路流程 1、监听广播->接受USB断开或者USB不充电广播->执行关机逻辑 涉及类 UsbManager/UsbDeviceManager \frameworks\base\services\usb\java\com\android\server\usb\UsbDeviceManager.java \frameworks\base\services\com\android\hardware\usb\UsbManager.java 2…...

用Python打造你的微博热搜追踪器

简介 在当今信息爆炸的时代,获取最新、最热门的信息成为了许多人的日常需求。微博热搜榜作为反映社会热点和公众关注焦点的重要窗口,其信息价值不言而喻。本文将介绍一个实用的Python爬虫程序,它能够自动爬取微博热搜榜的信息,并…...

TypeScript 在前端开发中的应用

TypeScript 在前端开发中的应用非常广泛。以下是一些常见的应用场景: 类型检查:TypeScript 是 JavaScript 的超集,它引入了静态类型检查。在开发过程中,TypeScript 编译器可以帮助开发者捕捉潜在的类型错误,提前发现并…...

【ArcGIS微课1000例】0115:字段数据类型案例详解

文章目录 一、ArcGIS数据类型概述二、案例1. 数字2. 文本3. 日期4. BLOB5. 对象标识符6. 全局标识符一、ArcGIS数据类型概述 创建要素类和表时,需要为各字段选择数据类型。可用的类型包括多种数字类型、文本类型、日期类型、二进制大对象 (BLOB) 或全局唯一标识符 (GUID)。选…...

ABC318-D

问题陈述 给你一个加权无向完整图&#xff0c;图中有 &#x1d441;N 个顶点&#xff0c;编号从 11 到 &#x1d441;N 。连接顶点 &#x1d456;i 和 &#x1d457;j 的边 (&#x1d456;<&#x1d457;)(i<j) 的边的长度与 (&#x1d456;<&#x1d457;)(i<j) …...

Java实现线程安全的单例模式

单例模式&#xff1a;保证某个类在程序中只存在唯⼀⼀份实例&#xff0c;而不会创建出多个实例&#xff0c;单例模式的类一般是构造器私有&#xff0c;通过一个方法返回唯一实例&#xff1b; 点这里查看线程安全的详细讲解&#xff1b; 常见的单例模式分为饿汉式和懒汉式 一…...

osg库的下载和安装

下载 下载地址:https://github.com/openscenegraph/OpenSceneGraph 安装 打开Cmake.exe,将上述下载的osg文件下的CMakeLists.txt文件拖入Cmake界面中。 在其路径下新建一个build文件 并配置cmake,点击Configure 修改如下几个选项 ACTUAL_3RDPARTY_DIR BUILD_OSG_EXAM…...

HTML、ASP.NET、XML、Javascript、DIV+CSS、JQuery、AJax的起源与简介

目录 HTML简介: 起源&#xff1a; ASP.NET简介&#xff1a; 起源: XML简介: 起源: JavaScript简介&#xff1a; 起源: DIVCSS简介: 起源&#xff1a; JQuery简介: 起源: AJax简介&#xff1a; HTML简介: HTML(Hyper Text Markup Language&#xff0c;超文本标记语言…...

SpringCloud微服务远程接口调用

一、概念 使用springcloud将项目拆分成一个一个微服务之后&#xff0c;微服务之间的接口调用就需要通过远程的方式实现&#xff0c;这里将介绍springcloud提供的两个微服务组件来介绍如何进行微服务间的远程接口调用。 1、使用RestTEmplate LoadBalanced来实现远程接口调用及…...

MySQL优化器的SQL重写规则

MySQL优化器的SQL重写规则 MySQL优化器的SQL重写规则&#xff1a;MySQL优化器会根据一定的规则对输入的SQL在保证含义不变的情况下进行SQL的优化重写。 1. 条件简化 1.1 移除不必要的括号 例如&#xff1a; ((a 5 AND b c) OR ((a > c) AND (c < 5))); --优化后 (a…...

57.void指针(万能指针)

目录 一.什么是void指针 二.视频教程 一.什么是void指针 在定义变量的时候&#xff0c;需要用到变量的类型&#xff0c;变量的类型在表示在内存中的大小&#xff0c;而void是空&#xff0c;表示的是无类型。所以如果用void来定义一个变量会发生错误&#xff08;无法在内存中挖…...

国科大-智能计算系统(AICS)期末试题(2024春)

国科大-智能计算系统期末试题&#xff08;2024春&#xff09; 填空题简答题最后一道大题 部分题目记录 填空题 卷积层中&#xff0c;input维度为16322020&#xff0c;filter维度为1283233&#xff0c;stride2&#xff0c;pad_left pad_top 0,pad_right pad_bottom 1,outpu…...

训练Pytorch深度学习模型出现StopIteration

训练一个深度学习检测模型&#xff0c;突然出现&#xff1a; 是因为next(batch_iterator)&#xff0c;可能迭代器读出来的数据为空。 # load train data# 原先代码images, targets next(batch_iterator)# 更改为&#xff1a;try:images, targets next(batch_iterator)except…...

windows上安装MongoDB,springboot整合MongoDB

上一篇文章已经通过在Ubuntu上安装MongoDB详细介绍了MongoDB的各种命令用法。 Ubuntu上安装、使用MongoDB详细教程https://blog.csdn.net/heyl163_/article/details/133781878 这篇文章介绍一下在windows上安装MongoDB&#xff0c;并通过在springboot项目中使用MongoDB记录用户…...

python_04

37、列表推导式 # 作用&#xff1a;快速生成列表 # 列表变量名 [x for x in range(开始值&#xff0c;结束值&#xff0c;步长) if 条件] # 注意&#xff1a;左闭右开 list1 [i for i in range(0,100)] print(list1) # list1 [i for i in range(0,100)] # print(list1)list…...

音视频视频点播

视频点播是集音视频采集&#xff0c;编辑&#xff0c;上传&#xff0c;自动化转码处理&#xff0c;媒体资源管理&#xff0c;高效云剪辑处理&#xff0c;分发加速&#xff0c;视频播放于一体的一站式音视频点播解决方案 阿里云视频点播基于阿里云强大的基础设施服务&#xff0c…...

Git常用命令1

1、设置用户签名 ①基本语法&#xff1a; git config --global user.name 用户名 git config --global user.email 邮箱 ②实际操作 ③查询是否设置成功 cat ~/.gitconfig 注&#xff1a;签名的作用是区分不同操作者身份。用户的签名信息在每一个版本的提交…...

Nextjs使用教程

一.手动创建项目 建议看这个中文网站文档,这个里面的案例配置都是手动的,也可以往下看我这个博客一步步操作 1.在目录下执行下面命令,初始化package.json文件 npm init -y2.安装react相关包以及next包 yarn add next react react-dom // 或者 npm install --save next react…...

mysql的增删查改(进阶)

目录 一. 更复杂的新增 二. 查询 2.1 聚合查询 COUNT SUM AVG MAX MIN 2.1.2 分组查询 group by 子句 2.1.3 HAVING 2.2 联合查询/多表查询 2.2.1 内连接 2.2.2 外连接 2.2.3 全外连接 2.2.4 自连接 2.2.5 子查询 2.2.6 合并查询 一. 更复杂的新增 将从表名查询到…...

九、从0开始卷出一个新项目之瑞萨RZN2L生产烧录固件(jflash擦写读外挂flash)

目录 七、生产烧录固件(jflash擦/写/读外挂flash) 7.1 flash母片读写 7.2 jflash擦/写/读外挂flash 九、从0开始卷出一个新项目之瑞萨RZN2L 七、生产烧录固件(jflash擦写读外挂flash) 七、生产烧录固件(jflash擦/写/读外挂flash) 7.1 flash母片读写 略 7.2 jflash擦/写/读…...

【RT-DETR涨点改进】SCI一区 2025顶刊 |全网独家创新,注意力改进篇 | RT-DETR引入DOAM动态全向注意力模块,模块,显著增强了特征表达能力和结构恢复能力,含7种独家创新改进点

一、本文介绍 🔥本文给大家介绍利用 DOAM 动态全向注意力模块改进RT-DETR网络模型,可在不显著增加计算量的前提下增强全局上下文建模能力,通过空间轴向聚合获得更强的跨区域信息交互,并用通道动态加权突出目标相关特征、抑制背景干扰,从而优化多尺度特征融合效果,提升小…...

实战应用:基于快马定制企业级ventoy维护盘,集成系统修复与数据恢复工具

今天想和大家分享一个实战项目&#xff1a;如何用InsCode(快马)平台快速打造一个企业级Ventoy维护盘。这个方案特别适合IT技术支持人员&#xff0c;能大幅提升日常维护效率。 项目背景与需求分析 日常工作中经常遇到需要重装系统、重置密码、恢复数据等场景。传统PE工具功能单一…...

告别传统知识蒸馏:用‘逆向蒸馏’在MVTec数据集上实现98.5%的异常检测精度

逆向蒸馏&#xff1a;工业质检场景下的异常检测新范式 在工业质检领域&#xff0c;异常检测一直是计算机视觉技术落地的核心挑战之一。传统方法往往受限于样本不平衡、缺陷类型多样等问题&#xff0c;而基于深度学习的方案又面临标注成本高、泛化能力不足的困境。CVPR 2022提出…...

2026 年电子邮件认证部署缺陷与安全风险治理研究

摘要 电子邮件作为网络攻击最主要入口&#xff0c;域名伪造与商业邮件欺诈&#xff08;BEC&#xff09;持续威胁机构安全。SPF、DKIM、DMARC 作为抵御邮件伪造的核心协议已提出十余年&#xff0c;但大量组织仍存在认知不足、配置错误、长期停留在监控模式等问题&#xff0c;导致…...

Android开发秘籍:给图片加上独特水印

Android开发秘籍&#xff1a;给图片加上独特水印 为什么要给图片加水印 在当今这个信息飞速传播的时代&#xff0c;图片作为一种直观且富有表现力的信息载体&#xff0c;在我们的生活和工作中无处不在。无论是在社交媒体上分享的精美摄影作品&#xff0c;还是电商平台上展示的…...

XXL-SSO与Active Directory集成:企业级身份管理终极方案

XXL-SSO与Active Directory集成&#xff1a;企业级身份管理终极方案 XXL-SSO是一款分布式单点登录框架&#xff0c;能够帮助企业实现多系统统一身份认证与授权。本文将详细介绍如何将XXL-SSO与Active Directory集成&#xff0c;打造企业级身份管理解决方案&#xff0c;让用户认…...

MiniCPM-V-2_6制造业:产线图识别+设备状态与维护提醒生成

MiniCPM-V-2_6制造业&#xff1a;产线图识别设备状态与维护提醒生成 1. 项目背景与价值 在现代制造业中&#xff0c;生产线的可视化监控和设备维护是保证生产效率和质量的关键环节。传统的人工巡检方式效率低下&#xff0c;容易遗漏细节&#xff0c;而且无法实时发现问题。Mi…...

Clipboard命令行参数完整指南:掌握所有可用选项的终极手册

Clipboard命令行参数完整指南&#xff1a;掌握所有可用选项的终极手册 【免费下载链接】Clipboard &#x1f60e;&#x1f3d6;️&#x1f42c; Your new, &#x1d667;&#x1d65e;&#x1d659;&#x1d664;&#x1d663;&#x1d660;&#x1d66a;&#x1d661;&#x1…...

新手福音:通过快马平台零代码基础理解qun329群聊应用开发

作为一个刚接触编程的新手&#xff0c;想要理解群聊应用开发确实容易一头雾水。最近我在尝试用InsCode(快马)平台搭建类似qun329的简单群聊网页时&#xff0c;发现整个过程比想象中简单很多。下面分享我的学习过程&#xff0c;希望能帮到同样零基础的朋友。 项目结构规划 首先明…...

基于vue的非遗文化传承平台[vue]-计算机毕业设计源码+LW文档

摘要&#xff1a;非物质文化遗产&#xff08;非遗&#xff09;作为民族文化的重要组成部分&#xff0c;承载着人类社会的文明和历史记忆。随着现代社会的快速发展&#xff0c;非遗文化的传承面临着诸多挑战。为了更好地保护和传承非遗文化&#xff0c;本文设计并实现了一个基于…...