sensorz

一个简单的 Flutter Android 应用,用于显示 Android 传感器数据。

简介 :

  • 此应用程序使用Flutter框架来实现UI。
  • 代码库主要使用Dart和Kotlin这两种语言编写。
  • 为了访问平台功能,例如传感器,使用了Kotlin语言。
  • UI级别的编码使用Dart语言完成。
  • 为了从平台级别接收连续的传感器数据流,使用了EventChannel。
  • 此Android应用已测试可在Android Pie (9.0)上正常运行。
  • 此应用使用Android Sensors Feature (android.hardware.sensor)。
  • 要使用adb安装apk,请在下载apk后,在您的计算机控制台中运行以下命令,
    确保您已安装adb并且PATH变量已正确设置。
  >>> adb install sensorz.apk
  • 有关adb的更多信息,请访问此链接

下载 :

屏幕截图 :

我在此处添加了一些Android应用程序的屏幕截图,这是我在物理Android设备上运行时截取的。

Screenshot_20190202-002843

Screenshot_20190202-002851

Screenshot_20190202-002900

实现信息 :

让我们先谈谈应用程序的Dart部分...

使用Dart的UI

  • main.dart中,我在一个Stateless Widget SensorMain中创建了一个Stateless Widget,它的initialRoute是SensorMainHome,这是一个Stateful Widget。

  • 由于我使用了一个Stateful Widget,我需要定义一个类来保存应用程序的当前状态。

  • _SensorMainState 保存应用程序的当前状态。

  • 需要在_SensorMainState中覆盖build方法。因此,我使用了一个Scaffold Widget,这是一个非常基础的基于Material Design的Widget。

  • 在Flutter中,几乎所有的UI组件都是Widget。

  • 为了显示传感器信息和它们的实时数据流,我使用了ListView布局管理器。

  • 一个Card (Material Design UI组件) 包含关于设备上某个传感器的信息。

  • 为了调用平台级别(Android API)中可用的方法,我使用了MethodChannel。

  • 首先需要使用一个唯一的methodChannelName (String) 来创建MethodChannel实例,平台级别的代码也应该使用相同的名称。

  • 该实例将帮助我们调用平台级别定义的方法。

  • 还创建了一个EventChannel,它帮助我们从平台级别获得实时的传感器数据更新。

  • 请记住,我们也需要从平台级别创建MethodChannel和EventChannel,使用相同的通道标识符字符串。

  • 有关更多信息,请查看代码注释。

进入应用程序的平台级别实现...

使用Kotlin的平台级别

  • MainActivity.kt中,我注册了MethodChannel和EventChannel。

  • 当从平台级别调用getSensorsList()时,将返回该设备上所有传感器的列表给UI级别的调用函数。

  • 并且使用我在应用程序生命周期开始时创建的SensorManager实例,为所有这些传感器注册了SensorEventListener

  • 为了将实时的传感器数据流发送到UI级别,以便我能在我收到数据时立即更新UI,我写了一个名为MySensorListener的类,它覆盖了SensorEventListener,并且只接受EventChannel.EventSink实例作为参数。

  • onSensorChanged()中,我将传感器数据发送回UI级别,在那里已经注册了一个监听服务。

  • 一旦数据传入,UI级别的Dart代码就开始提取该数据并更新UI,以便更改能够得到反映。

GitHub

https://github.com/itzmeanjan/sensorz/