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的更多信息,请访问此链接。
下载 :
- 您可以轻松地在此处下载apk文件。
屏幕截图 :
我在此处添加了一些Android应用程序的屏幕截图,这是我在物理Android设备上运行时截取的。



实现信息 :
让我们先谈谈应用程序的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,以便更改能够得到反映。