PROJECT_STRUCTURE.md 15 KB

项目结构说明

📁 整体结构

bBeng-HeartRate-4.66-pad/
├── app/                          # 主应用模块
├── core/                         # 核心模块(语音识别等)
├── ICDeviceManager/              # IC 设备管理模块
├── myLockView/                   # ✅ Kiosk 模式模块(本次集成重点)
├── myWIFIView/                   # ✅ WiFi 配置模块
├── uniplugin_module/             # UniApp 插件模块
├── build.gradle                  # 根项目构建配置
└── settings.gradle               # 模块配置

📦 模块详细说明

1. app/ - 主应用模块

app/
├── src/main/
│   ├── AndroidManifest.xml                              # ✅ 已修改(Application、权限、Receiver)
│   ├── assets/                                          # UniApp 资源文件
│   │   └── apps/__UNI__8D02B4B/www/                    # UniApp 编译产物
│   ├── java/com/YuyeTech/HeartRate/
│   │   ├── MyApplication.java                           # ✅ 新增(自定义 Application)
│   │   └── KioskHelper.java                             # ✅ 新增(锁屏控制辅助类)
│   └── res/
│       ├── xml/
│       │   └── device_admin.xml                         # ✅ 新增(Device Admin 配置)
│       ├── values/
│       │   ├── strings.xml
│       │   └── themes.xml
│       └── drawable/...                                 # 图标、启动图等
├── libs/                                                # AAR 依赖库
│   ├── lib.5plus.base-release.aar                       # DCloud 5+ 基础库
│   ├── uniapp-v8-release.aar                            # UniApp V8 引擎
│   └── ...                                              # 其他第三方库
└── build.gradle                                         # 应用构建配置

关键文件

  • MyApplication.java - 应用入口,负责自动初始化 Kiosk
  • KioskHelper.java - 提供静态方法控制锁屏
  • AndroidManifest.xml - 声明 Application、权限、Receiver

2. myLockView/ - Kiosk 模式模块 🔐

myLockView/
├── src/main/
│   ├── AndroidManifest.xml                              # 模块清单(Receiver 声明)
│   ├── java/com/ble/mylockview/
│   │   ├── admin/                                       # 设备管理
│   │   │   ├── KioskManager.java                        # 🌟 Kiosk 核心管理器
│   │   │   └── KioskDeviceAdminReceiver.java           # Device Admin 接收器
│   │   ├── boot/                                        # 开机启动
│   │   │   ├── BootReceiver.java                       # 开机广播接收器
│   │   │   ├── BootLauncher.java                       # 启动逻辑
│   │   │   └── BootActionChecker.java                  # 启动条件检查
│   │   ├── config/                                      # 配置
│   │   │   └── LaunchConfig.java                       # Activity 配置
│   │   └── service/                                     # 服务
│   │       └── StartService.java                       # 前台服务
│   └── res/xml/
│       └── device_admin.xml                             # Device Admin 策略定义
└── build.gradle                                         # 模块构建配置

核心功能

KioskManager.java

  • ✅ LockTask 模式(防止退出应用)
  • ✅ 全屏沉浸式(隐藏状态栏、导航栏)
  • ✅ 按键拦截(Home、Back、Menu)
  • ✅ 五指逃生门(5 指长按 5 秒 + 密码)
  • ✅ Activity 生命周期管理

关键 API

KioskManager.setDebug(boolean)          // 设置调试模式
KioskManager.attach(Activity)           // 绑定 Activity
KioskManager.onResume()                 // Activity onResume
KioskManager.onPause()                  // Activity onPause
KioskManager.onDestroy()                // Activity onDestroy
KioskManager.exitKiosk()                // 退出 Kiosk 模式
KioskManager.interceptKey(KeyEvent)     // 拦截按键
KioskManager.interceptTouch(MotionEvent) // 拦截触摸(逃生门)

BootReceiver.java

  • 监听开机广播
  • 自动启动应用
  • 支持 Direct Boot(加密设备快速启动)

3. myWIFIView/ - WiFi 配置模块 📶

myWIFIView/
├── src/main/
│   ├── AndroidManifest.xml
│   ├── java/com/ble/mywifiview/
│   │   ├── WifiModule.java                              # 🌟 WiFi 核心模块
│   │   ├── WifiAdapter.java                            # WiFi 列表适配器
│   │   ├── WifiScanItem.java                           # WiFi 扫描项
│   │   ├── WifiCallback.java                           # 连接回调接口
│   │   ├── WifiConnector.java                          # 连接工具类
│   │   ├── WifiPasswordDialog.java                     # 密码输入对话框
│   │   └── WifiDisconnectDialog.java                   # 断开确认对话框
│   └── res/
│       ├── layout/
│       │   ├── dialog_wifi_list.xml                    # WiFi 列表对话框
│       │   ├── item_wifi.xml                           # WiFi 列表项
│       │   └── dialog_wifi_password.xml                # 密码输入对话框
│       └── drawable/                                    # WiFi 图标资源
└── build.gradle

核心功能

WifiModule.java

  • ✅ WiFi 扫描(支持 Android 8 ~ 14)
  • ✅ WiFi 连接(开放/加密网络)
  • ✅ WiFi 断开
  • ✅ 已保存网络管理
  • ✅ 权限请求(位置权限)
  • ✅ 自动处理 Android 10+ 限制

关键 API

WifiModule.showWifiDialogView(Context, WifiCallback)  // 显示 WiFi 列表对话框
WifiModule.scan(Context)                              // 扫描 WiFi
WifiModule.connect(Context, ssid, password, callback) // 连接 WiFi
WifiModule.disconnect(Context)                        // 断开 WiFi
WifiModule.isWifiReallyConnected(Context)            // 检查 WiFi 连接状态
WifiModule.getConnectedWifiSsid(Context)             // 获取当前连接的 SSID
WifiModule.openWifiSettings(Context)                  // 跳转系统 WiFi 设置

使用方式

// 从 JS 调用(需要交互)
WifiModule.showWifiDialogView(activity, new WifiCallback() {
    @Override
    public void onConnecting() {
        // 正在连接
    }
    
    @Override
    public void onConnected() {
        // 连接成功
    }
    
    @Override
    public void onFailed(String reason) {
        // 连接失败
    }
    
    @Override
    public void onDisconnected() {
        // 已断开
    }
});

4. uniplugin_module/ - UniApp 插件模块

uniplugin_module/
├── src/main/
│   ├── AndroidManifest.xml
│   └── java/io/dcloud/uniplugin/
│       ├── HeartRateModule.java                         # 心率模块(JS 接口)
│       ├── ICDeviceModule.java                          # IC 设备模块(JS 接口)
│       ├── TestModule.java                              # 测试模块
│       ├── NativePageActivity.java                      # 原生页面
│       ├── permission.java                              # 权限管理
│       └── db800/                                       # DB800 心率设备 SDK
│           ├── HeartRateSdkManager.java
│           ├── BluetoothUtils.java
│           ├── HearRateManagerCallbacks.java
│           └── ScannerPacket.java
└── build.gradle

说明

  • 这是 UniApp 和原生模块的桥接层
  • 通过 uni.requireNativePlugin() 从 JS 调用原生功能
  • 包含心率设备、IC 设备等业务模块

5. core/ - 核心模块

core/
├── src/main/
│   ├── AndroidManifest.xml
│   ├── java/...                                         # 百度语音识别相关
│   └── jniLibs/                                         # 原生 .so 库
└── libs/
    └── bdasr_V3_20210628_cfe8c44.jar                    # 百度 ASR SDK

🔗 模块依赖关系

app (主应用)
 ├─→ core                        (语音识别)
 ├─→ ICDeviceManager             (IC 设备)
 ├─→ myLockView                  (Kiosk 模式) ✅
 ├─→ myWIFIView                  (WiFi 配置) ✅
 └─→ uniplugin_module            (UniApp 插件)

app/build.gradle 中声明

dependencies {
    implementation project(':core')
    implementation project(':ICDeviceManager')
    implementation project(':myLockView')        // ✅
    implementation project(':myWIFIView')        // ✅
    implementation project(':uniplugin_module')
    
    // UniApp 核心库
    implementation fileTree(dir: 'libs', include: ['*.aar', '*.jar'])
}

⚙️ 配置文件说明

1. settings.gradle

include ':app'
include ':core'
include ':ICDeviceManager'
include ':myLockView'           // ✅
include ':myWIFIView'           // ✅
include ':uniplugin_module'

2. build.gradle(项目级)

buildscript {
    ext.kotlin_version = '1.8.0'
    
    repositories {
        google()
        mavenCentral()
    }
    
    dependencies {
        classpath 'com.android.tools.build:gradle:7.4.2'
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
    }
}

3. build.gradle(app 模块)

android {
    compileSdkVersion 33
    
    defaultConfig {
        applicationId "com.YuyeTech.HeartRate"
        minSdkVersion 26
        targetSdkVersion 33
        versionCode 1
        versionName "4.66"
    }
    
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

📝 本次修改文件清单

✅ 新增文件

  1. app/src/main/java/com/YuyeTech/HeartRate/MyApplication.java
  2. app/src/main/java/com/YuyeTech/HeartRate/KioskHelper.java
  3. app/src/main/res/xml/device_admin.xml
  4. KIOSK_SETUP_GUIDE.md
  5. QUICK_TEST_GUIDE.md
  6. README_KIOSK_INTEGRATION.md
  7. PROJECT_STRUCTURE.md (本文件)

✏️ 修改文件

  1. app/src/main/AndroidManifest.xml
    • 修改 Application 为 MyApplication
    • 添加 Kiosk 相关权限
    • 添加 Device Admin Receiver
    • 添加 Boot Receiver

🔍 关键代码位置

Kiosk 自动初始化

文件app/src/main/java/com/YuyeTech/HeartRate/MyApplication.java 位置onCreate()registerActivityLifecycleCallbacks()onActivityCreated()

@Override
public void onActivityCreated(@NonNull Activity activity, @Nullable Bundle savedInstanceState) {
    if (activity instanceof io.dcloud.PandoraEntry || 
        activity instanceof io.dcloud.PandoraEntryActivity) {
        
        // ✅ 这里实现了"无需 JS 调用"的核心逻辑
        KioskHelper.disableLockScreen(activity);
        KioskHelper.keepScreenOn(activity);
        KioskManager.attach(activity);
    }
}

锁屏禁用实现

文件app/src/main/java/com/YuyeTech/HeartRate/KioskHelper.java 方法disableLockScreen(Activity)

public static void disableLockScreen(Activity activity) {
    // 1. 解锁当前屏幕
    activity.getWindow().addFlags(
        WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD |
        WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED |
        WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON
    );
    
    // 2. 作为 Device Owner 禁用锁屏
    DevicePolicyManager dpm = ...;
    if (dpm.isDeviceOwnerApp(packageName)) {
        dpm.setKeyguardDisabled(adminComponent, true);
    }
}

Kiosk 核心逻辑

文件myLockView/src/main/java/com/ble/mylockview/admin/KioskManager.java 关键方法

  • attach(Activity) - 初始化(第 69 行)
  • enableLockTask() - 启用 LockTask(第 107 行)
  • hideSystemUI() - 隐藏系统 UI(第 165 行)
  • interceptTouch(MotionEvent) - 五指逃生门(第 236 行)

📊 数据流向

Kiosk 模式启动流程

System Boot
    ↓
MyApplication.onCreate()
    ↓
LaunchConfig.setLaunchActivity(PandoraEntry.class)
KioskManager.setDebug(BuildConfig.DEBUG)
    ↓
ActivityLifecycleCallbacks 注册
    ↓
User Launch App / BootReceiver 启动
    ↓
PandoraEntry.onCreate()
    ↓
onActivityCreated() 回调
    ↓
KioskHelper.disableLockScreen()     [禁用锁屏]
KioskHelper.keepScreenOn()          [屏幕常亮]
KioskManager.attach()               [进入 Kiosk]
    ↓
hideSystemUI()                      [隐藏状态栏]
enableLockTask()                    [锁定任务]
    ↓
Kiosk Mode Active ✅

WiFi 配置流程

JS 调用
    ↓
uni.requireNativePlugin('myWIFIView')
    ↓
WifiModule.showWifiDialogView()
    ↓
检查权限 → 扫描 WiFi
    ↓
显示列表对话框
    ↓
用户点击 WiFi
    ↓
输入密码(如需)
    ↓
WifiModule.connect()
    ↓
Android 10+: NetworkRequest
Android 9-:  WifiConfiguration
    ↓
回调:onConnected() / onFailed()

🎯 关键技术点

1. UniApp 架构

  • DCloudApplication - UniApp 基础 Application
  • PandoraEntry - UniApp 启动 Activity(Launcher)
  • PandoraEntryActivity - UniApp 主 Activity

2. Activity 生命周期监听

  • Application.ActivityLifecycleCallbacks - 监听所有 Activity 生命周期
  • onActivityCreated() 中自动初始化 Kiosk

3. Device Owner 模式

  • DevicePolicyManager.setKeyguardDisabled() - 禁用锁屏
  • DevicePolicyManager.setLockTaskPackages() - 设置 LockTask 白名单
  • Activity.startLockTask() - 进入 LockTask 模式

4. Android 版本兼容

  • WiFi 模块兼容 Android 8 ~ 14
  • Android 10+ 使用 WifiNetworkSpecifier
  • Android 9- 使用 WifiConfiguration

🛠️ 开发工具链

构建工具

  • Gradle 7.5
  • Android Gradle Plugin 7.4.2
  • Kotlin 1.8.0

SDK 版本

  • compileSdkVersion 33 (Android 13)
  • minSdkVersion 26 (Android 8.0)
  • targetSdkVersion 33 (Android 13)

IDE

  • Android Studio / Cursor
  • HBuilderX(UniApp 开发)

📚 参考文档


最后更新:2026-01-22
文档版本:1.0