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

Android ShellUtils手机管理器

1. Android ShellUtils手机管理器

  Android Shell工具类,可用于检查系统root权限,并在shell或root用户下执行shell命令。如:
checkRootPermission() 检查root权限 。execCommand(String[] commands, boolean isRoot, boolean isNeedResultMsg) shell 环境执行命令,第二个参数表示是否root权限执行 execCommand(String command, boolean isRoot) shell环境执行命令。

1.1. 代码

import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.List;public class ShellUtils {public static final String COMMAND_SU = "su";public static final String COMMAND_SH = "sh";public static final String COMMAND_EXIT = "exit\n";public static final String COMMAND_LINE_END = "\n";public ShellUtils() {}public static boolean checkRootPermission() {return execCommand("echo root", true, false).result == 0;}public static CommandResult execCommand(String command, boolean isRoot) {return execCommand(new String[]{command}, isRoot, true);}public static CommandResult execCommand(List<String> commands, boolean isRoot) {return execCommand(commands == null ? null : (String[])commands.toArray(new String[0]), isRoot, true);}public static CommandResult execCommand(String[] commands, boolean isRoot) {return execCommand(commands, isRoot, true);}public static CommandResult execCommand(String command, boolean isRoot, boolean isNeedResultMsg) {return execCommand(new String[]{command}, isRoot, isNeedResultMsg);}public static CommandResult execCommand(List<String> commands, boolean isRoot, boolean isNeedResultMsg) {return execCommand(commands == null ? null : (String[])commands.toArray(new String[0]), isRoot, isNeedResultMsg);}public static CommandResult execCommand(String[] commands, boolean isRoot, boolean isNeedResultMsg) {int result = -1;if (commands != null && commands.length != 0) {Process process = null;BufferedReader successResult = null;BufferedReader errorResult = null;StringBuilder successMsg = null;StringBuilder errorMsg = null;DataOutputStream os = null;try {process = Runtime.getRuntime().exec(isRoot ? "su" : "sh");os = new DataOutputStream(process.getOutputStream());String[] var13 = commands;int var12 = commands.length;String s;for(int var11 = 0; var11 < var12; ++var11) {s = var13[var11];if (s != null) {os.write(s.getBytes());os.writeBytes("\n");os.flush();}}os.writeBytes("exit\n");os.flush();result = process.waitFor();if (isNeedResultMsg) {successMsg = new StringBuilder();errorMsg = new StringBuilder();successResult = new BufferedReader(new InputStreamReader(process.getInputStream()));errorResult = new BufferedReader(new InputStreamReader(process.getErrorStream()));while((s = successResult.readLine()) != null) {successMsg.append(s);}while((s = errorResult.readLine()) != null) {errorMsg.append(s);}}} catch (IOException var24) {var24.printStackTrace();} catch (Exception var25) {var25.printStackTrace();} finally {try {if (os != null) {os.close();}if (successResult != null) {successResult.close();}if (errorResult != null) {errorResult.close();}} catch (IOException var23) {var23.printStackTrace();}if (process != null) {process.destroy();}}return new CommandResult(result, successMsg == null ? null : successMsg.toString(), errorMsg == null ? null : errorMsg.toString());} else {return new CommandResult(result, (String)null, (String)null);}}public static class CommandResult {public int result;public String successMsg;public String errorMsg;public CommandResult(int result) {this.result = result;}public CommandResult(int result, String successMsg, String errorMsg) {this.result = result;this.successMsg = successMsg;this.errorMsg = errorMsg;}}
}

1.2. 使用

(1)关机

public void ShutDown(View view) {ShellUtils.execCommand("reboot -p", true);
}

(2)重启

public void Reboot(View view) {ShellUtils.execCommand("reboot", true);
}

(3)快速重启

public void FastReboot(View view) {ShellUtils.execCommand("busybox killall system_server", true);
}

(4)进入刷机模式

public void Recovery(View view) {ShellUtils.execCommand("reboot recovery", true);
}

(5)进入引导模式

public void FastBoot(View view) {ShellUtils.execCommand("reboot bootloader", true);
}

1.3. adb shell input keyevent 控制按键输入的数值

  adb shell的功能很强大,可以使用很多功能,今天我们说下通过控制按键输入:adb shell input keyevent xx ,具体数值xx如下
KEYCODE_CALL 进入拨号盘 5
KEYCODE_ENDCALL 挂机键 6
KEYCODE_HOME 按键Home 3
KEYCODE_MENU 菜单键 82
KEYCODE_BACK 返回键 4
KEYCODE_SEARCH 搜索键 84
KEYCODE_CAMERA 拍照键 27
KEYCODE_FOCUS 拍照对焦键 80
KEYCODE_POWER 电源键 26
KEYCODE_NOTIFICATION 通知键 83
KEYCODE_MUTE 话筒静音键 91
KEYCODE_VOLUME_MUTE 扬声器静音键 164
KEYCODE_VOLUME_UP 音量增加键 24
KEYCODE_VOLUME_DOWN 音量减小键 25
  控制键
KEYCODE_ENTER 回车键 66
KEYCODE_ESCAPE ESC键 111
KEYCODE_DPAD_CENTER 导航键 确定键 23
KEYCODE_DPAD_UP 导航键 向上 19
KEYCODE_DPAD_DOWN 导航键 向下 20
KEYCODE_DPAD_LEFT 导航键 向左 21
KEYCODE_DPAD_RIGHT 导航键 向右 22
KEYCODE_MOVE_HOME 光标移动到开始键 122
KEYCODE_MOVE_END 光标移动到末尾键 123
KEYCODE_PAGE_UP 向上翻页键 92
KEYCODE_PAGE_DOWN 向下翻页键 93
KEYCODE_DEL 退格键 67
KEYCODE_FORWARD_DEL 删除键 112
KEYCODE_INSERT 插入键 124
KEYCODE_TAB Tab键 61
KEYCODE_NUM_LOCK 小键盘锁 143
KEYCODE_CAPS_LOCK 大写锁定键 115
KEYCODE_BREAK Break/Pause键 121
KEYCODE_SCROLL_LOCK 滚动锁定键 116
KEYCODE_ZOOM_IN 放大键 168
KEYCODE_ZOOM_OUT 缩小键 169
  利用命令“adb shell input keyevent <键值>”可以实现自动化。例如“adb shell input keyevent 3”就可以按下Home键。]
(1)执行返回:adb shell input keyevent 4
(2)执行灭屏亮屏:adb shell input keyevent 26
(3)执行解锁屏幕:adb shell input keyevent 82

相关文章:

Android ShellUtils手机管理器

1. Android ShellUtils手机管理器 Android Shell工具类&#xff0c;可用于检查系统root权限&#xff0c;并在shell或root用户下执行shell命令。如&#xff1a; checkRootPermission() 检查root权限 。execCommand(String[] commands, boolean isRoot, boolean isNeedResultMsg)…...

《梦幻西游》本人收集的34个单机版游戏,有详细的视频架设教程,值得收藏

梦幻西游这款游戏&#xff0c;很多人玩&#xff0c;喜欢研究的赶快下载吧。精心收集的34个版本。不容易啊。里面有详细的视频架设教程&#xff0c;可以外网呢。 《梦幻西游》本人收集的34个单机版游戏&#xff0c;有详细的视频架设教程&#xff0c;值得收藏 下载地址&#xff1…...

吴恩达机器学习全课程笔记第六篇

目录 前言 P96-P100 使用多个决策树 随机森林算法 XGBoost 什么时候使用决策树 P101-P107 聚类 K-means 初始化K-means 选择聚类的个数 P108-P113 异常检测算法 开发和评估异常检测系统 异常检测vs监督学习 选择要使用的特征 前言 这是吴恩达机器学习笔记的第…...

ue4.27 发现 getRandomReachedLocation 返回 false

把这个玩意儿删掉&#xff0c;重启工程&#xff0c;即可 如果还不行 保证运动物体在 volum 内部&#xff0c;也就是绿色范围内确保 project setting 里面的 navigation system 中 auto create navigation data 是打开的(看到过博客说关掉&#xff0c;不知道为啥) 如果还不行&…...

【C++ AVL树】

文章目录 AVL树AVL树的概念AVL树节点的定义AVL树的插入AVL树的旋转右单旋左单旋左右双旋右左双旋 代码实现 总结 AVL树 AVL树的概念 二叉搜索树在顺序有序或接近有序的情况下&#xff0c;而插入搜索树将退化为单叉树&#xff0c;此时查找的时间复杂度为O(n)&#xff0c;效率低…...

记录一次架构优化处理性能从3千->3万

0.背景 优化Kafka消费入Es&#xff0c;适配600台设备上报数据&#xff0c;吞吐量到达2万每秒 1.环境配置 2.压测工具 3.未优化之前的消费逻辑 4.优化之后的消费流程 5.多线程多ESclient 6.修改ES配置&#xff0c;增加kafka分区&#xff0c;增加线程&#xff0c;提升吞吐量 7.…...

c++二进制位运算使用方法

文章主要内容&#xff1a; C 中的位运算符主要用于对整数类型的数据进行位操作&#xff0c;包括按位与&#xff08;&&#xff09;、按位或&#xff08;|&#xff09;、按位异或&#xff08;^&#xff09;、取反&#xff08;~&#xff09;、左移&#xff08;<<&#…...

TypeScript之JSON点语法调用

场景 当我们想要通过将JSON中的属性名赋值给一个变量,并且通过点语法实现字段调用.常规的String变量保存会出现下述问题,就可以通过String[][]实现动态调用字段. let parentJSON{"name":"liupeng"}let a:String;Object.keys(parentJSON).forEach(key >…...

手撕Java集合之简易版Deque(LinkedList)

在目前&#xff0c;许多互联网公司的面试已经要求能手撕集合源码&#xff0c;集合源码本身算是源码里比较简单的一部分&#xff0c;但是要在面试极短的10来分钟内快速写出一个简易版的源码还是比较麻烦的&#xff0c;很容易出现各种小问题。所以在平时就要注重这方面的联系。 以…...

MySQL知识点归纳总结(二)

10、MVCC实现原理&#xff1f; 事务ID&#xff08;Transaction ID&#xff09;&#xff1a;每个事务在执行时都会被分配一个唯一的事务ID&#xff0c;用于标识该事务的开始时间顺序。事务ID是一个递增的整数&#xff0c;随着每个新事务的开始而递增。 Undo日志&#xff08;Un…...

vue:实现顶部消息横向滚动通知

前言 系统顶部展示一个横向滚动的消息通知&#xff0c;就是消息内容从右往左一直滚动。 效果如下&#xff1a; 代码 使用 <template><div class"notic-bar"><img :src"notic" class"notice-img" /><div class"noti…...

[笔记] wsl 禁用配置 win系统环境变量+代理

wsl 配置禁用 win系统环境变量 进入 wsl 的 /etc/wsl.conf 目录&#xff0c;增加以下配置&#xff1a; [interop] enabledfalse appendWindowsPathfalse然后退出wsl&#xff0c;并且执行关闭正在运行的 wsl&#xff0c;执行命令 wsl --shutdown 最后重新进入wsl 即可。 参考…...

Mysql标量子查询

目录 子查询标量子查询数据准备 子查询 SQL语句中嵌套select语句&#xff0c;称为嵌套查询&#xff0c;又称子查询。 SELECT * FROM t1 WHERE column1 ( SELECT column1 FROM t2 ... );子查询外部的语句可以是insert / update / delete / select 的任何一个&…...

深入了解Java虚拟机(JVM)

Java虚拟机&#xff08;JVM&#xff09;是Java程序运行的核心组件&#xff0c;它负责解释执行Java字节码&#xff0c;并在各种平台上执行。JVM的设计使得Java具有跨平台性&#xff0c;开发人员只需编写一次代码&#xff0c;就可以在任何支持Java的系统上运行。我们刚开始学习Ja…...

Image Fusion via Vision-Language Model【文献阅读】

阅读目录 文献阅读AbstractIntroduction3. Method3.1. Problem Overview3.2. Fusion via Vision-Language Model 4. Vision-Language Fusion Datasets5. Experiment5.1Infrared and Visible Image Fusion 6. Conclusion个人总结 文献阅读 原文下载&#xff1a;https://arxiv.or…...

探索Manticore Search:开源全文搜索引擎的强大功能

在当今信息爆炸的时代&#xff0c;数据的快速检索变得至关重要。无论是在电子商务网站、新闻门户还是企业内部文档&#xff0c;高效的搜索引擎都是确保用户满意度和工作效率的关键因素之一。而在搜索引擎领域&#xff0c;Manticore Search 作为一款开源的全文搜索引擎&#xff…...

AI 笔记助手,你的思路整理助手

大家好&#xff0c;今天给大家介绍一款非常实用的 AI 笔记助手——AI Note。这款助手就像是一个贴心的小助手&#xff0c;能帮助我们整理笔记&#xff0c;提高学习和工作效率。 &#x1f916; AI Note 可以智能总结笔记内容&#xff0c;准确标记重点&#xff0c;让我们更快地获…...

EchoServer回显服务器简单测试

目录 工具介绍 工具使用 测试结果 工具介绍 github的一个开源项目,是一个测压工具 EZLippi/WebBench: Webbench是Radim Kolar在1997年写的一个在linux下使用的非常简单的网站压测工具。它使用fork()模拟多个客户端同时访问我们设定的URL&#xff0c;测试网站在压力下工作的…...

车灯修复UV胶的优缺点有哪些?

车灯修复UV胶的优点如下&#xff1a; 优点&#xff1a; 快速固化&#xff1a;通过紫外光照射&#xff0c;UV胶可以在5-15秒内迅速固化&#xff0c;提高了修复效率。高度透明&#xff1a;固化后透光率高&#xff0c;几乎与原始车灯材料无法区分&#xff0c;修复后车灯外观更加…...

探讨倒排索引Elasticsearch面试与实战:从理论到实践

在当前大数据时代&#xff0c;Elasticsearch&#xff08;以下简称为ES&#xff09;作为一种强大的搜索和分析引擎&#xff0c;受到了越来越多企业的青睐。因此&#xff0c;对于工程师来说&#xff0c;掌握ES的面试准备和实战经验成为了必备技能之一。本文将从ES的面试准备和实际…...

手把手教你离线部署Stable Diffusion XL:Python Diffusers库魔改实战(附完整代码)

手把手教你离线部署Stable Diffusion XL&#xff1a;Python Diffusers库魔改实战&#xff08;附完整代码&#xff09; 在金融、医疗等对数据安全要求极高的行业&#xff0c;或是某些科研机构的隔离网络中&#xff0c;AI模型的离线部署能力直接决定了技术落地的可能性。今天我们…...

从零开始掌握YOLO——实时目标检测的技术详解

你正在打开手机相册,系统自动把所有照片按“人物”“风景”“宠物”整理好;你开车经过十字路口,路边的摄像头精准识别出车牌和车型;工厂流水线上,机械臂的“眼睛”实时锁定每一个瑕疵品——这些场景背后,几乎都站着一个名字:YOLO。 YOLO(You Only Look Once)自2015年…...

HunyuanVideo-Foley镜像深度解析:CUDA12。4与RTX4090D的优化细节

HunyuanVideo-Foley镜像深度解析&#xff1a;CUDA12.4与RTX4090D的优化细节 1. 为什么选择CUDA12.4驱动 在星图GPU平台上部署HunyuanVideo-Foley模型时&#xff0c;我们选择了CUDA12.4作为基础驱动版本。这个决定基于几个关键考量&#xff1a; 首先&#xff0c;CUDA12.4针对…...

(31)列出视图的垂直模式,起点在上方。水平模式,起点在左边。对于水平滚动框,也是如此

&#xff08;55&#xff09;&#xff08;56&#xff09; 谢谢...

Sunday算法实战:C++高效内存特征码搜索与通配符优化

1. Sunday算法与内存特征码搜索初探 第一次接触内存特征码搜索时&#xff0c;我完全被那些十六进制数字和问号搞懵了。直到发现Sunday算法这个神器&#xff0c;才真正体会到什么叫"秒搜"的快感。简单来说&#xff0c;Sunday算法就像是个超级眼疾手快的图书管理员&…...

Windows空间魔术师:FreeMove如何用符号链接为你的C盘减负30%

Windows空间魔术师&#xff1a;FreeMove如何用符号链接为你的C盘减负30% 【免费下载链接】FreeMove Move directories without breaking shortcuts or installations 项目地址: https://gitcode.com/gh_mirrors/fr/FreeMove 想象一下&#xff0c;你的C盘就像一个拥挤的储…...

保姆级教程:在PyBullet里用UR10+Robotiq夹爪抓取鼠标,从环境搭建到避坑调参

PyBullet实战&#xff1a;UR10机械臂与Robotiq夹爪的鼠标抓取全流程解析 机械臂仿真技术正在重塑工业自动化和机器人研究的未来。想象一下&#xff0c;你刚拿到一台UR10协作机械臂和Robotiq夹爪&#xff0c;急需验证抓取算法却受限于硬件调试周期——这正是PyBullet物理引擎大显…...

5分钟搞定!Jetson Orin TX2上的PyTorch 2.1快速安装教程(含CUDA 11.4验证)

Jetson Orin TX2极速部署指南&#xff1a;PyTorch 2.1与CUDA 11.4实战手册 当AI模型需要跑在边缘设备上时&#xff0c;Jetson Orin TX2凭借其强大的算力和能效比成为许多开发者的首选。但不同于x86平台&#xff0c;ARM架构的Jetson系列在环境配置上总有那么些"小脾气"…...

Redis持久化:从AOF到RDB,如何实现数据不丢失?谑

Qt是一个跨平台C图形界面开发库&#xff0c;利用Qt可以快速开发跨平台窗体应用程序&#xff0c;在Qt中我们可以通过拖拽的方式将不同组件放到指定的位置&#xff0c;实现图形化开发极大的方便了开发效率&#xff0c;本笔记将重点介绍QSpinBox数值微调组件的常用方法及灵活应用。…...

别再死记Twist公式了!用‘拧螺丝’的直觉理解机器人运动学(附Python可视化代码)

从拧螺丝到机器人运动学&#xff1a;用生活直觉破解Twist公式的奥秘 刚接触机器人学的同学&#xff0c;一定对Twist&#xff08;速度旋量&#xff09;这个概念又爱又恨——它既能精确描述刚体运动&#xff0c;又抽象得让人摸不着头脑。传统教材一上来就抛出ω和v的数学定义&…...