0

我正在尝试构建一个本机 tizen 应用程序,它将检测活动并定期收集传感器数据以上传到远程 http 服务器。

为此,我开发了两件事。
1. 用于启动/停止的本机 UI 应用程序
2. 服务应用程序

我正在使用通过 wifi 上的远程设备管理器连接的samsung gear fit 2 pro在 tizen studio 中开发项目。

当我运行我的应用程序时,它在我的设备连接到 sdb 时工作正常。但是,当我断开设备连接时,它开始执行非确定性行为。例如,当它连接到 tizen studio 时,App 会记录每 60 秒的前 15 秒的数据,并在第 16 秒将该文件上传到服务器。它还从活动更改的回调开始。
但是,一旦设备断开连接,该间隔就无法正确维持,即传感器在 30 分钟后读取数据(这也会有所不同),甚至每秒收集数据的频率也会大大降低。但是如果 UI 应用程序在前台,那么一切都很好。

因此,如果我的应用程序处于前台或处于前台/后台并且设备连接到 pc 上的 sdb,则我的应用程序可以正常工作。

无论设备是否连接到 PC 上的 tizen sdb,如何让我的服务始终在后台运行?

NB 数据上传是使用 libcurl 完成的,它使用 5 秒的超时进行连接,失败时会跳过上传。使用了 Ecore 定时器,但定时器应该不是问题,因为我已经通过运行传感器进行了测试,但频率降低问题仍然存在。服务应用中的传感器启动选项如下

sensor_get_default_sensor(sensor_type, &sensor);
sensor_create_listener(sensor, &listener[sensor_type]);
sensor_listener_set_event_cb(listener[sensor_type], 1000 / SENSOR_FREQ, example_sensor_callback, vc);
sensor_listener_set_option(listener[sensor_type], SENSOR_OPTION_ALWAYS_ON);
sensor_listener_start(listener[sensor_type]);
4

3 回答 3

1

请参阅此处此处的相关问题。

在我看来,CPU 将进入 SLEEP 状态并阻碍您的录制。为了防止这种情况,使用

device_power_request_lock(POWER_LOCK_CPU, 0);

在启动传感器侦听器之前。完成后,释放锁

device_power_release_lock(POWER_LOCK_CPU);

根据您所针对的 Tizen 版本,您还可能(需要)使用

sensor_listener_set_attribute_int(listener[sensor_type], SENSOR_ATTRIBUTE_PAUSE_POLICY, SENSOR_PAUSE_NONE);

它被引入作为替代

sensor_listener_set_option(listener[sensor_type], SENSOR_OPTION_ALWAYS_ON);

在 Tizen API 3.0 中。

这可以在此处此处此处的 API 中找到。

于 2020-11-11T05:59:40.633 回答
0

将服务应用程序与 UI 应用程序绑定可能会出现问题。

于 2019-11-06T06:22:47.610 回答
0

我认为背景类别元素有助于解决这个问题。根据指南,background-category 允许应用程序在后台运行。

因此,您需要修改清单文件,这是一个示例。

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns="http://tizen.org/ns/packages" api-version="2.4" package="org.tizen.test" version="1.0.0">
   <ui-application appid="org.tizen.test" exec="text" type="capp" multiple="false" taskmanage="true" nodisplay="false">
      <icon>rest.png</icon>
      <label>rest</label>
      <!--For API version 2.4 or higher-->
      <background-category value="media"/>
      <background-category value="download"/>
      <background-category value="background-network"/>
   </ui-application>
   <service-application appid="org.tizen.test-service" exec="test-service" multiple="false" type="capp"/>
      <background-category value="background-network"/>
      <background-category value="location"/>
   </service-application>
</manifest>

该值可以设置为媒体、下载、后台网络、位置、传感器、物联网通信,我认为,在这种情况下,该值应该是传感器。

于 2020-01-16T07:37:11.383 回答