Android:不同活动的沟通

时间:2014-06-23 21:44:41

标签: android android-activity

我有一个问题(不是基于代码的)被视为不同应用程序组件之间的通信。

我想写一个“大”的记录/跟踪工具。这个工具确实有3个部分。

  1. 部分,我的主要活动。我想通过点击/点击复选框
  2. 来开始/停止跟踪/记录
  3. 部分,位置部分,我想在其中跟踪用户的位置历史记录(通过位置API)
  4. 部分,传感器记录部分,其中我可以跟踪用户智能手机上的所有传感器数据。
  5. 在第2部分和第3部分中,我想设置Location API的设置(例如准确度和刷新时间)和传感器API,另外在第3部分中我想激活/停用不同的传感器进行记录。

    在第1部分,我的主要活动,我想开始完整的记录/跟踪。

    附图中有更多解释。

    我在JAVA中编码没问题。我的问题是,我是Android的新手。我对一个活动没有任何问题。但不止一个...... uuuh。我不理解我的MainActivity之间的通信,例如位置活动(图片中的名称)

    在JAVA中,我将拥有自己的类Location / Sensor,我将存储我的逻辑。

    点击“点击打开跟踪”后,我会创建2个线程(用于位置和传感器),其中将开始跟踪。两者都会将其数据保存在列表中,在我停止跟踪后,它将按照我的要求写入文本文件。

    在Android中? 在我的特例中?我有3项活动吗?我是否通过意图进行交流?这有点令人困惑,因为在这种情况下,所有这些Activites都有自己的onCreated()/ onStop()/ ......方法。所以我确实需要从我的活动中分离我的跟踪/记录逻辑,因为我只想选择/设置我的设置,然后关闭我的位置/记录活动以在此之后返回到我的MainActivity。

    如果你能推荐一个教程或者帮助我,那会很棒。

    enter image description here

1 个答案:

答案 0 :(得分:1)

假设您希望在应用程序处于后台时接收位置和传感器事件,我建议的是:

  • 将您的跟踪设置保存在某些永久存储中,例如SharedPreferences,您的配置屏幕(活动/片段)只是读取和写入这些设置
  • 在您的主要活动中,选中复选框后,请先阅读最新配置,开始跟踪,并确保您的智能设备是" on"
  • 要请求位置,请使用以PendingIntent作为参数的方法,例如http://developer.android.com/reference/android/location/LocationManager.html#requestLocationUpdates(long,float,android.location.Criteria,android.app.PendingIntent)并将PendingIntent的目标设置为您处理和保留位置的IntentService
  • 要请求传感器事件,您需要一个活动的侦听器。创建一个单独的服务,例如通过AlarmManager定期调用以收集传感器数据样本,然后可以保留

请记住,在服务中进行操作(例如,收听传感器事件)时,设备的应用程序处理器可能会进入休眠状态,您将停止接收事件。为了防止这种情况,你需要获得一个唤醒锁,但要注意不要耗尽电池。此外,当设备重新启动时,您需要重新启用您的位置/警报侦听器。

最后,您最终可能会得到这样的架构:

  • 用户界面:编辑跟踪设置和启用/停用跟踪的活动
  • TrackingHelper:具有启用/禁用跟踪逻辑的类 - 注册触发SensorService以收集某些传感器数据的位置侦听器和警报
  • SensorService:注册为在请求的时间间隔内侦听传感器事件然后自行停止的服务
  • LoggerService:一个IntentService,它接收Location对象(可能还有其他数据)并保留它们
  • BootReceiver:一个调用TrackingHelper.startTracking的BroadcastReceiver(如果启用了跟踪)