Android节点读写实现

news/2025/1/26 17:47:16/


在工作中,我们会对一些节点进行读写操作。比如控制闪光灯,指示灯;降噪芯片开关或其低功耗开关,因为项目中常用到,在此记录,备忘~

直接上代码,想用直接拿去

一 监听某个节点的写入值的反馈

有些节点写入是可以监听到写入结果的,比如降噪芯片低功耗节点写入后可以监听其写入结果,代码如下

java">/*** 读取操作低功耗的开启/关闭结果*/
private void readOpenLowPowerCOnsumptionResult() {Log.e(TAG, "readOpenLowPowerCOnsumptionResult init");new Thread(() -> {try {File deviceFile = new File("/dev/ttyS0");if (!deviceFile.exists()) {Log.e(TAG,"Device file not found: " + "/dev/ttyS0");return;}FileInputStream fis = new FileInputStream(deviceFile);BufferedReader reader = new BufferedReader(new InputStreamReader(fis));Log.d(TAG, "Reading from " + "/dev/ttyS0" + "...");String line;while ((line = reader.readLine()) != null) {Log.d(TAG,"Log: " + line);if ("OK: low_pw 1".equals(line)) {Log.e(TAG, "auxstatus open low_pw success");// isWaitingRead =false;}else if ("OK: low_pw 0".equals(line)) {Log.e(TAG, "auxstatus close low_pw success");// isWaitingRead =false;}else {Log.e(TAG, "readOpenAudResult result :" + line);}}Log.d(TAG, "Reading from " + "/dev/ttyS0" + "---");reader.close();} catch (IOException e) {e.printStackTrace();Log.e(TAG, "Error reading from /dev/ttyS0");}}).start();}

二 写入节点

2.1

java">/*** 开启降噪低功耗模式* @param  isOpen true:开启低功耗;false 关闭低功耗* @return        [description]*/
private synchronized boolean openAudLowPower(boolean isOpen) {Log.d(TAG, "openAudLowPower init----1 isOpen:" + isOpen);java.lang.Process process = null;DataOutputStream os = null;try {String[] command = {"sh"};process = Runtime.getRuntime().exec(command);os = new DataOutputStream(process.getOutputStream());os.writeBytes( "stty -F /dev/ttyS0 -echo\n");os.writeBytes( "stty -F /dev/ttyS0 ispeed 115200 ospeed 115200 cs8\n");if (isOpen) {os.writeBytes("printf 'low_pw 1' > /dev/ttyS0\n");}else {os.writeBytes("printf 'low_pw 0' > /dev/ttyS0\n");}os.writeBytes("exit\n");os.flush();int result = process.waitFor();Log.d(TAG, "openAudch result : " + result);} catch (Exception e) {Log.d(TAG, "openAudLowPower exception msg: " + e.getMessage());Log.e(TAG, "openAudLowPower , send error");e.printStackTrace();return false;} finally {try {if (os != null) {os.close();}process.destroy();} catch (Exception e) {Log.e(TAG, "send error");return false;}Log.e(TAG, "openAudLowPower finally end");}return true;}

2.2还有使用echo 实现写入节点,代码如下

java"> public boolean openEncLvl() {if (DEBUG_INPUT) {Slog.d(TAG, "openEncLvl init---- ");}java.lang.Process process = null;DataOutputStream os = null;try {process = Runtime.getRuntime().exec("sh");os = new DataOutputStream(process.getOutputStream());os.writeBytes( "stty -F /dev/ttyS0 -echo\n");os.writeBytes( "stty -F /dev/ttyS0 ispeed 115200 cs8\n");os.writeBytes( "echo enc_lvl 1 > /dev/ttyS0\n");os.writeBytes("exit\n");os.flush();process.waitFor();} catch (Exception e) {if (DEBUG_INPUT) {Slog.d(TAG, "openEncLvl exception msg: " + e.getMessage());}Log.e(TAG, "openEncLvl , 发送失败。");e.printStackTrace();return false;} finally {try {if (os != null) {os.close();}process.destroy();} catch (Exception e) {Log.e(TAG, "发送失败");return false;}if (DEBUG_INPUT) {Slog.d(TAG, "openEncLvl finally end");}}return true;}

2.1和2.2 实现的区别就是写入值的时候

2.1如下实现:

os.writeBytes("printf 'low_pw 1' > /dev/ttyS0\n");

2.2如下实现:

os.writeBytes( "echo enc_lvl 1 > /dev/ttyS0\n");

----------------------------------------

若使用直接拿去,可运行!

 大家新年快乐~


http://www.ppmy.cn/news/1566029.html

相关文章

springboot使用ssl连接elasticsearch

使用es时ssl证书报错 unable to find valid certification path to requested target 1.依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-elasticsearch</artifactId></dependency>2…

什么是三高架构?

大家好&#xff0c;我是锋哥。今天分享关于【什么是三高架构?】面试题。希望对大家有帮助&#xff1b; 什么是三高架构? 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 “三高架构”通常是指高可用性&#xff08;High Availability&#xff09;、高性能&#xff…

C22.【C++ Cont】位运算总结(1)(例题五种解法!含汇编解法)

目录 1.撰写缘由 2.知识回顾 位运算符 左移和右移的特点 3.位运算的应用 1.判断奇偶性 2.保留二进制位中的指定位 3.获取二进制的指定位 4.按位或在某些情况下等价于加法运算 *例题 分析 代码 方法1 提交结果 方法2 提交结果 方法3 ​编辑 提交结果 方法4:…

百度输入法,自定义时间短语

设置技巧 高级设置-更多-自定义短语 #$(year)-$(month_mm)-$(day_dd) $(fullhour):$(minute):$(second)函数表如下&#xff1a; 函数 含义 举例$year 年(4位) 2006、2008$year_yy 年(2位) 06、08$month 月 12、8、3$month_mm 月 12、0…

C语言基础------练习

1.求二维数组中元素的最大值&#xff0c;并输出行标和列标 代码运行结果: 代码实现解析: //定义并初始化二维数组int arr[3][4] {{1, 2, 3, 4},{5, 6, 7, 8},{9, 10, 11, 12}}; //这里定义了一个3行4列的二维数组&#xff0c;并初始化了其元素。//初始化最大值及其行标和列标…

码随想录算法训练营Day13 | Leetcode226 反转二叉树,101 对称二叉树,104二叉树的最大深度,111二叉树的最小深度

226 反转二叉树 题目链接/文章讲解/视频讲解&#xff1a;https://programmercarl.com/0226.%E7%BF%BB%E8%BD%AC%E4%BA%8C%E5%8F%89%E6%A0%91.html 此题最直接的方法是用前序或后序&#xff0c;中序的话需要绕个弯子 前序 class Solution:# 递归三部曲# 1. 确定递归函数、参…

Linux(Centos、Ubuntu) 系统安装jenkins服务

该文章手把手演示在Linux系统下如何安装jenkins服务、并自定义jenkins数据文件位置、以及jenkins如何设置国内镜像源加速&#xff0c;解决插件下载失败问题 安装方式&#xff1a;war包安装 阿里云提供的war下载源地址&#xff1a;https://mirrors.aliyun.com/jenkins/war/?s…

JavaScript 数组的map和join方法、延迟函数、location对象、本地存储、正则表达式、箭头函数

数组处理方法 map方法 map方法的作用是遍历数组所有元素&#xff0c;然后执行处理操作&#xff0c;最后返回一个新的数组 语法格式&#xff1a;新数组 原来数组.map(function(ele,index){ ele是数组元素&#xff0c;index是下标 执行完操作之后使用return 返回一个…