Android开发知识杂录

1.XML解析问题

增加XML布局文件时候出现

mergeDebugResources 错误

解决方案

由于XML默认文件带有BOM,remove bom即可

2.开机启动界面添加

3.开机隐藏系统桌面

4.添加敲击传感器GPIO

1. 测试板子的GPIO引脚情况

echo in > /sys/class/gpio/gpio<gpio_number>/direction

cat /sys/class/gpio/gpio<gpio_number>/value

所以:

GPIO7_A5=7*32+0*8+5+base=1229

GPIO8_A1=257+base=1257

2.由于系统自带的GPIO-KEY驱动,可以不用写代码,直接修改内核DTS即可

在pinctrl和gpio-key增加节点

2. 在Android中,可以通过sysfs文件系统访问GPIO。您可以使用sysfs接口来设置GPIO引脚的方向(输入或输出),读取GPIO状态和注册GPIO事件。

vi arch/arm/boot/dts/

   a. 首先,查找GPIO引脚的编号。您可以查看设备的文档或者运行`cat /sys/kernel/debug/pinctrl/rockchip/pins`命令来获取GPIO引脚的详细信息。

   b. 设置GPIO引脚为输入模式。在终端中运行以下命令:

      ```bash
      echo in > /sys/class/gpio/gpio<gpio_number>/direction
      ```

      其中,`<gpio_number>`是GPIO引脚的编号。

   c. 读取GPIO状态。在终端中运行以下命令:

      ```bash
      cat /sys/class/gpio/gpio<gpio_number>/value
      ```

      您可以使用这个命令来检测GPIO的电平变化。

   d. 注册GPIO事件。您可以使用`sysfs`接口在Android中注册GPIO事件,以便在GPIO状态变化时接收通知。您需要编写一段C/C++代码,将其编译为共享库,并在Android应用程序中调用该库。

   下面是一个简单的示例代码,展示如何在C/C++中使用`sysfs`接口注册GPIO事件:

   ```c
   #include <fcntl.h>
   #include <unistd.h>

   // GPIO事件回调函数
   void gpio_event_callback(int gpio_fd) {
       // 读取GPIO的状态
       char value;
       read(gpio_fd, &value, sizeof(value));

       // TODO: 处理GPIO状态变化
   }

   // 注册GPIO事件
   void register_gpio_event(int gpio_number) {
       // 打开GPIO设备文件
       char gpio_device[50];
       sprintf(gpio_device, "/sys/class/gpio/gpio%d/value", gpio_number);
       int gpio_fd = open(gpio_device, O_RDONLY);

       // 创建一个线程来监听GPIO的状态变化
       pthread_t thread;
       pthread_create(&thread, NULL, gpio_event_thread, &gpio_fd);
   }
   ```

   在`gpio_event_thread`线程中,您可以使用`gpio_event_callback`函数来处理GPIO状态变化。在这个回调函数中,您可以将变化的GPIO状态通知给Android应用程序。

3. 在Android应用程序中接收GPIO事件。为了接收和处理GPIO事件,您需要在Android应用程序中编写代码,监听GPIO事件。

   您可以使用JNI(Java Native Interface)将C/C++代码与Java代码进行交互。

   a. 首先,编写一个JNI接口类,将C/C++代码与Java代码进行绑定。在JNI接口类中,声明一个本地方法,以便从C/C++代码中调用它。

   ```java
   public class GpioEventManager {
       static {
           System.loadLibrary("gpio-event-lib");
       }

       public native void registerGpioEvent(int gpioNumber);
       public native void unregisterGpioEvent();
       public native void gpioStateChanged(int gpioValue);
   }
   ```

   b. 然后,在C/C++代码中,您可以使用JNI接口来调用Java的回调函数。

   ```c
   #include <jni.h>

   // Java VM实例
   JavaVM* gJvm;
   jobject gObj;
   jmethodID gCallbackMethod;

   // 设置Java回调函数
   void set_java_callback(JNIEnv* env, jobject obj, jmethodID callbackMethod) {
       gJvm = jvm;
       gObj = env->NewGlobalRef(obj);
       gCallbackMethod = callbackMethod;
   }

   // GPIO事件回调函数
   void gpio_event_callback(int gpio_fd) {
       // 读取GPIO的状态
       char value;
       read(gpio_fd, &value, sizeof(value));

       // 将GPIO状态通知给Java回调函数
       JNIEnv* env;
       gJvm->AttachCurrentThread(&env, NULL);
       env->CallVoidMethod(gObj, gCallbackMethod, value);
       gJvm->DetachCurrentThread();
   }
   ```

   在`gpio_event_thread`线程中,您可以调用`set_java_callback`函数,以便与Java代码进行通信。

4. 在Android应用程序中使用`GpioEventManager`类。您可以在Android应用程序中使用`GpioEventManager`类,来监听GPIO事件并处理GPIO状态变化。

   a. 首先,实例化`GpioEventManager`类,并调用`registerGpioEvent`方法,以便开始监听GPIO事件。

   ```java
   GpioEventManager gpioEventManager = new GpioEventManager();
   gpioEventManager.registerGpioEvent(gpioNumber);
   ```

   b. 在`gpioStateChanged`方法中,您可以处理GPIO状态变化。您可以在这个方法中发送通知,更新UI或执行其他操作。

   ```java
   public void gpioStateChanged(int gpioValue) {
       // 处理GPIO状态变化
   }
   ```

   c. 您还需要在Android应用程序的`onDestroy`或相应的生命周期方法中调用`unregisterGpioEvent`方法,以停止接收GPIO事件。

   ```java
   @Override
   protected void onDestroy() {
       super.onDestroy();
   
       gpioEventManager.unregisterGpioEvent();
   }
 

参考资料:

RK系列(RK3568) GPIO按键驱动 和Android key新值添加_hmbbPdx_的博客-CSDN博客

GPIO-KEY 驱动分析_gpio_keys_bobuddy的博客-CSDN博客

rk3288 Pinctrl子系统的概念学习_习惯就好zz的博客-CSDN博客

RK3288_Android7.1添加两个gpio的按键_安卓主板 adc接口_平仄散人的博客-CSDN博客

基于RK3568的Linux驱动开发——GPIO知识点(一)_daisy.skye的博客-CSDN博客

5.android studio配置系统签名的APP

参考:

Android 系统签名打包方法_android 打包签名_ssuqin001的博客-CSDN博客

6.linux下烧录工具

下载地址:

https://github.com/aloksinha2001/rk_linux_upgrade.git

参考: 

Rockchip | Rockchip固件升级工具_upgrade_tool_嵌入式purple的博客-CSDN博客

rockchip-linux/rkdeveloptool (github.com)

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

排序-八大排序FollowUp

FollowUp 1.插入排序 (1).直接插入排序 时间复杂度:最坏情况下:0(n^2) 最好情况下:0(n)当数据越有序 排序越快 适用于: 待排序序列 已经基本上趋于有序了! 空间复杂度:0(1) 稳定性:稳定的 public static void insertSort(int[] array){for (int i 1; i < array.length; i…

计算机网络chapter1——家庭作业

文章目录 复习题1.1节&#xff08;1&#xff09; “主机”和“端系统”之间有何不同&#xff1f;列举几种不同类型的端系统。web服务器是一种端系统吗&#xff1f;&#xff08;2&#xff09;协议一词常用来用来描述外交关系&#xff0c;维基百科是如何描述外交关系的&#xff1…

mac虚拟机软件哪个好 mac虚拟机怎么安装Windows 苹果Mac电脑上受欢迎的主流虚拟机PK Parallels Desktop和VM

什么是苹果虚拟机&#xff1f; 苹果虚拟机是一种软件工具&#xff0c;它允许在非苹果硬件上运行苹果操作系统&#xff08;如ios&#xff09;。通过使用虚拟机&#xff0c;您可以在Windows PC或Linux上体验和使用苹果的操作系统&#xff0c;而无需购买苹果硬件。 如何使用苹果虚…

CSDN如何在个人主页开启自定义模块|微信公众号

目前只有下面三种身份才具有这个功能。 VIP博客专家企业博客 栏目内容不知道怎么写HTML的&#xff0c;可以联系我帮你添加

Maven入门:1.简介与环境搭建

一.简介与环境搭建 1.Maven&#xff1a;用于自动化构建项目&#xff08;按照企业主流模板构建完善的项目结构&#xff09;和管理项目依赖&#xff08;依赖就是项目的jar包&#xff0c;通过配置的方式进行添加和管理&#xff0c;自动下载和导入&#xff09;的工具。即更加方便构…

C 408—《数据结构》图、查找、排序专题考点(含解析)

目录 Δ前言 六、图 6.1 图的基本概念 6.2 图的存储及基本操作 6.3 图的遍历 6.4 图的应用 七、查找 7.2 顺序查找和折半查找 7.3 树型查找 7.4 B树和B树 7.5 散列表 八、排序 8.2 插入排序 8.3 交换排序 8.4 选择排序 8.5 归并排序和基数排序 8.6 各种内部排序算法的比较及…

表格中斜线的处理

此处的斜线,不是用表格写的,但是也适用于表格,只是需要更改表格的样式,可以 按照如下处理,即可 呈现的效果:如图所示 template部分: <div class"header_detail custom"><div class"right">节次</div><div class"left">…

C/C++实现高性能并行计算——1.pthreads并行编程(中)

系列文章目录 pthreads并行编程(上)pthreads并行编程(中)pthreads并行编程(下)使用OpenMP进行共享内存编程 文章目录 系列文章目录前言一、临界区1.1 pi值估计的例子1.2 找到问题竞争条件临界区 二、忙等待三、互斥量3.1 定义和初始化互斥锁3.2 销毁。3.3 获得临界区的访问权&…

windows11安装nginx

1.解压nginx安装包到没有中文的目录 2.双击运行nginx.exe 3.任务管理器查看是否有nginx进程 4.任务管理器->性能->资源监视器 5.网络->侦听端口&#xff0c;查看nginx侦听的端口&#xff0c;这里是90端口

大连宇都环境 | 成都5月水科技大会暨技术装备成果展览会

中华环保联合会水环境治理专业委员会 秘书处 王小雅 13718793867 —— 展位号&#xff1a;A09 —— 一、企业介绍 大连宇都环境成立于2002年&#xff0c;公司20年 MBBR填料产品及工艺技术&#xff0c;&#xff0c;构建了研发、制造、设计、工程、运营链式服务能力&#xff…

数据赋能(73)——数据要素:特征

生产要素中的数据要素具有一系列基本特征&#xff0c;这些特征使得数据在现代经济活动中发挥着越来越重要的作用。数据要素的主要特征如下图所示。 数据已经成为关键的生产要素&#xff0c;数据要素的基本特征可以概括为&#xff1a;虚拟性、非消耗性、非稀缺性、非均质性、排他…

selinux 基础知识

目录 概念 作用 SELinux与传统的权限区别 SELinux工作原理 名词解释 主体&#xff08;Subject&#xff09; 目标&#xff08;Object&#xff09; 策略&#xff08;Policy&#xff09; 安全上下文&#xff08;Security Context&#xff09; 文件安全上下文查看 先启用…

如何解决网络应用运行中的审核问题【系列研究预告】

目前互联网是非常发达的&#xff0c;但是随着技术的发展&#xff0c;有些问题逐渐变得严重。对于一般企业而言&#xff0c;一个比较重要的问题就是审核准确性和成本问题。 比如知乎的审判官&#xff0c;我本人是最早的一批审判官&#xff0c;然而多年下来的经历却很让人感到无…

数据结构—C语言实现双向链表

目录 1.双向带头循环链表 2.自定义头文件&#xff1a; 3.List.cpp 文件 3.1 newnode()函数讲解 3.2 init() 函数 初始化 3.3 pushback()函数 尾插 3.4 pushfront()函数 头插 3.5 popback() 尾删 3.6 popfront() 函数 头删 3.7 insert()函数 在pos之后插入 3.8 popbac…

uniapp 对接 Apple 登录

由于苹果要求App使用第三方登录必须要求接入Apple登录 不然审核不过 所以&#xff1a; 一、勾选苹果登录 二、 设置AppId Sign In Apple 设置完成重新生成描述文件 &#xff01;&#xff01;&#xff01;&#xff01;证书没关系 示例代码&#xff1a; async appleLogin…

Delta lake with Java--将数据保存到Minio

今天看了之前发的文章&#xff0c;居然有1条评论&#xff0c;看到我写的东西还是有点用。 今天要解决的问题是如何将 Delta产生的数据保存到Minio里面。 1、安装Minio&#xff0c;去官网下载最新版本的Minio&#xff0c;进入下载目录&#xff0c;运行如下命令&#xff0c;曾经…

Co-assistant Networks for Label Correction论文速读

文章目录 Co-assistant Networks for Label Correction摘要方法Noise DetectorNoise Cleaner损失函数 实验结果 Co-assistant Networks for Label Correction 摘要 问题描述&#xff1a; 描述医学图像数据集中存在损坏标签的问题。强调损坏标签对深度神经网络性能的影响。 提…

SpringBoot指标监控

一.SpringBoot指标监控_添加Actuator功能 Spring Boot Actuator可以帮助程序员监控和管理SpringBoot应用&#xff0c;比如健康检查、内存使用情况统计、线程使用情况统计等。我 们在SpringBoot项目中添加Actuator功能&#xff0c;即可使用Actuator监控 项目&#xff0c;用法如…

使用YALMIP定义LMI,SEDUMI求解矩阵方程

YALMIP&#xff08;Yet Another MATLAB Package for Modeling and Optimization&#xff09;是一个MATLAB工具箱&#xff0c;用于定义和求解优化问题&#xff0c;包括线性矩阵不等式&#xff08;LMI&#xff09;问题。SEDUMI是一个用于求解LMI问题的求解器&#xff0c;它可以与…

Vitis HLS 学习笔记--S_AXILITE 寄存器及驱动

目录 1. 简介 2. S_AXILITE Registers 寄存器详解 2.1 “隐式”优势 2.2 驱动程序文件 2.3 硬件头文件 2.4 硬件头文件中 SC/COR/TOW/COH 的解释 2.5 驱动控制过程 3. 总结 1. 简介 回顾此博文《Vitis HLS 学习笔记--Syn Report解读&#xff08;1&#xff09;-CSDN博…