Xvisio 代码示例
Xvisio SDK 文档主页

android-non-root-demo


1 概述

android-non-root-demo 工程演示了如何使用 Xvisio Android SDK(APK版本)开发 Android apk 应用程序。

2 构建和运行

2.1 环境搭建

  1. 首先需要在 Linux/Windows 主机上安装 Android Studio。点击此处下载。
  2. 启动 Android Studio 打开 SDK Manager 安装最新的 Android SDK 和 NDK 。
  3. 从 Github 下载最新的 android-non-root-demo 工程。
    点击此处下载。
  4. 查看 android-non-root-demo 工程的版本, android-non-root-demo/xvsdk/build.gradle
    defaultConfig {
        versionCode 3xxx
        versionName "3.x.x-xxxxxxxx"
  1. 获取最新SDK安装包: 请选择下载包含有"xvsdk_3.x.x-xxxxxxx_android_apk.zig"字样的压缩包。
  2. 解压缩SDK安装包 "xvsdk_3.x.x-xxxxxxx_android_apk.zig",并将 SDK 压缩包中的文件复制到 android-non-root-demo 工程中替换最新SDK。文件路径:android-non-root-demo/xvsdk/src/main/cpp/xvsdk/,替换后 SDK 目录如下:
android-non-root-demo/xvsdk/src/main/cpp/xvsdk
├── android                                      
├── bin                                 
├── doc   
├── examples 
├── include 
├── include2 
├── libs 
├── unity-wrapper 
├── ChangeLog 
├── deploy-arm64-v8a.sh 
├── deploy-armeabi-v7a.sh   
├── deploy-x86_64.sh  
└── README.md                      
              

2.2 编译运行

  1. 启动 Android Studio 打开 android-non-root-demo 工程。

  2. Build->Make Project 编译工程,编译完成后 Run->Run 'app' 安装 apk。

  3. 使用USB连接 XVisio 设备和 android 设备,连接成功后,android 设备会弹出USB设备选择对话框,见下图:

    image

  4. 选择 xslam 打开应用程序。

3 代码介绍

3.1 工程目录

android-non-root-demo
├── app                                      -- 主界面模块
├── landmode                                 -- 横屏模式模块
└── xvsdk/src/main                           -- xvsdk 模块
    ├── cpp
    │   ├── wrapper                          -- xvsdk JNI 接口   
    │   └── xvsdk                            -- Xvisio Android SDK(APK版本)
    └── java                                 -- xvsdk java 接口 

3.2 主要文件

文件 描述
xslam_android.cpp xvsdk JNI 接口封装文件
XCamera.java xvsdk java 接口类
ImuListener.java IMU 数据回调接口
PoseListener.java 6DOF 数据回调接口
RgbListener.java RGB 相机数据回调接口
TofListener.java TOF 深度数据回调接口
TofIrListener.java TOF IR 深度数据回调接口
StereoListener.java 双目鱼眼相机数据回调接口
SgbmListener.java Sgbm 深度数据回调接口

3.3 代码解析和介绍

  1. 在 AndroidManifest.xml 文件添加权限:
    <uses-permission android:name="android.permission.CAMERA" />
    <uses-permission android:name="android.permission.USB_PERMISSION" />
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE" />

    <uses-feature android:name="android.hardware.usb.host" />
    <uses-feature android:name="android.hardware.camera" />

  1. 在 AndroidManifest.xml 文件为主 Activity 添加 USB 设备监听配置:
   <intent-filter>
      <action android:name="android.hardware.usb.action.USB_DEVICE_ATTACHED" />
   </intent-filter>

   <meta-data
      android:name="android.hardware.usb.action.USB_DEVICE_ATTACHED"
      android:resource="@xml/usb_filter" />

  1. 初始化 sdk 注册设备连接回调:
   XCamera mCamera = new XCamera();
   mCamera.init(mAppContext);
   mCamera.setDevicesChangedCallback(mListener);
  1. 获取 IMU 数据:
    ImuListener mImuListener = new ImuListener() {
        @Override
        public void onImu(double x, double y, double z) {

        }
    };
    mCamera.setImuCallback(mImuListener);
    mCamera.startStream(XCamera.Stream.IMU);
  1. 获取 SLAM 6DOF 数据:
    PoseListener mPoseListener = new PoseListener() {
        @Override
        public void onPose(double x, double y, double z, double pitch, double yaw, double roll) {

        }
    };
    mCamera.setPoseCallback(mPoseListener);
    mCamera.startStream(XCamera.Stream.SLAM);
  1. 获取 RGB 相机数据:
    RgbListener mRgbListener = new RgbListener() {
        @Override
        public void onFps(int fps) {

        }

        @Override
        public void onRgb(int width, int height, int[] pixels) {

        }
    };
    mCamera.setRgbCallback(mRgbListener);
    mCamera.startStream(XCamera.Stream.RGB);
  1. 获取 TOF 相机数据:
    TofListener mTofListener = new TofListener() {
        @Override
        public void onTof(int width, int height, int[] pixels) {
            
        }
    };
    TofListener mTofIrListener = new TofIrListener() {
        @Override
        public void onTofIr(int width, int height, int[] pixels) {
            
        }
    };
    mCamera.setTofCallback(mTofListener);
    mCamera.setTofIrCallback(mTofIrListener);
    mCamera.startStream(XCamera.Stream.TOF);
  1. 获取鱼眼相机数据:
    StereoListener mStereoListener = new StereoListener() {
        @Override
        public void onStereo(int width, int height, int[] pixels) {

        }
    };
    mCamera.setStereoCallback(mStereoListener);
    mCamera.startStream(XCamera.Stream.STEREO);
  1. 获取 SGBM 数据:
    SgbmListener mSgbmListener = new SgbmListener() {
        @Override
        public void onSgbm(int width, int height, int[] pixels) {

        }
    };
    mCamera.setSgbmCallback(mSgbmListener);
    mCamera.startStream(XCamera.Stream.SGBM);

Xvisio 代码示例
Xvisio SDK 文档主页

android-non-root-demo

2 构建和运行

3 代码介绍