访问POSIX-timer事件处理程序

时间:2016-06-28 15:58:20

标签: android multithreading delphi timer android-sensors

Uses AndroidApi.Timer, System.Sensors;

我不想通过GPS传感器放电,因为在我的Adnroid服务中我使用POSIX-timer(AndroidTimerCreate)。在它的事件处理程序中不时(每5分钟)我启用并禁用LocationSensor。

当我引用属性TSensorManager.Current:

TSensorManager.Current.Activate;
FSensors := SensorManager.Current.GetSensorsByCategory(TSensorCategory.Location);

我收到错误:

Сan't start sensor: java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()

但是如果要在 AndroidServiceStartCommand AndroidServiceCreate 方法中执行此代码,那么 SensorManager 就会激活。

对于测试我将代码从服务转移到多设备应用程序 - 问题仍然存在。

请帮我解决问题的决定,如何在计时器中启用和禁用LocationSensor(每5分钟启用/禁用一次)?

1 个答案:

答案 0 :(得分:0)

我找到了解决方案:

  1. ACTION_LOCATION_CHANGE 操作上为 LocalBroadcastManager 创建过滤器,注册 LocalBroadcastReceiver ;
  2. 在计时器的事件中发送sendBroadcast动作 ACTION_LOCATION_CHANGE ;
  3. 在处理程序 LocalBroadcastReceiver 中, TLocationSensor 属性 Active
  4. 我盯着the sulution here,这是一个很好的例子。