在这种情况下我应该如何获得Context?

时间:2011-08-22 11:27:41

标签: android android-context

我必须在Sensor Manageraccelerometer等传感器之上设计一个compass类。此项目将是一个class library项目,将被引用并用于其他需要传感器设备数据的android项目。问题是,为了在我的accelerometer课程中使用compassSensor Manager等设备,我需要Context。我无法弄清楚如何在这种情况下访问当前上下文。

我应该要求Sensor Manager的来电者/用户在某个方法的参数中传递Context吗?如果多个类或活动将使用我的传感器管理器怎么办?实际上我只会使用一个Context,它会导致问题吗?

或者是否有任何简单,安全和可靠的方式来获取当前应用程序的上下文?

更新

这是我目前的设计......

我已经为SensorManager和SensorManager中的每个设备实现了单例。因此,例如,SensorManager中只有一个Accelerometer实例。调用者将获取SensorManager,然后调用方法RegisterForAccelerometer。因此,只要SensorManager的Accelerometer实例内的Accelerometer坐标有任何更新,就会通知所有已注册的呼叫者。现在问题出现了,当我第一次尝试开始监听加速度计的坐标时,因为我需要上下文。

2 个答案:

答案 0 :(得分:1)

在我看来,您必须通过使用这些设备的特定context的{​​{1}}。我假设您没有将这些课程设为Activity

此外,如果您想将课程设为Singleton,我猜您可以通过singleton而不是Application context,但如果可行,我不确定。

更新:

请参阅此Activity context上下文http://developer.android.com/reference/android/app/Application.html

  

通常不需要子类Application。在大多数情况下,静态单例可以以更模块化的方式提供相同的功能。如果你的单例需要一个全局上下文(例如注册广播接收器),那么检索它的函数可以给一个Context,它在第一次构造单例时在内部使用Context.getApplicationContext()。

因此,无论您是哪种活动,都会传递此Application Application

答案 1 :(得分:0)

一个上下文对你来说是不够的。取决于您的实现和需求,您可能希望将上下文存储在映射中或仅用于特定操作,因此这将影响传递此上下文的方法和时间。

我可以粗略地说,如果你使用它来构造一个将使用上下文的新对象,或者如果你有一个单例,请在这个调用中请求上下文,如果你创建了类的多个实例,则在构造函数中传递它/工厂方法。