2011-08-22 107 views
0

我必須在類似accelerometer,compass等傳感器之上設計一個Sensor Manager類。該項目將是一個class library項目,該項目將在其他需要來自傳感器設備的數據的android項目中引用和使用。問題是,爲了在我的Sensor Manager課程中玩accelerometercompass等設備,我需要Context。我無法弄清楚在這種情況下如何訪問當前的上下文。在這種情況下,我應該如何獲取Context?

我應該問我的Sensor Manager的呼叫者/用戶在某些方法的參數中通過Context嗎?如果多個班級或活動將使用我的傳感器管理器,該怎麼辦?實際上,我只會使用一個上下文,會導致問題嗎?

或者是否有任何簡單,安全和可靠的方式來獲取當前應用程序的上下文?

更新

這是我目前的設計...

我已經實現單對的SensorManager,也爲裏面的SensorManager每個設備。例如,SensorManager內部只有一個Accelerometer實例。調用者將獲得SensorManager,然後調用方法RegisterForAccelerometer。因此,只要SensorManager的Accelerometer實例內的加速度計座標有任何更新,將通知所有註冊的呼叫者。現在問題來了,當我嘗試開始第一次聽取加速度計座標時,因爲我需要上下文。

回答

1

一個上下文對你來說是不夠的。取決於你的實現和需求,你可能希望將上下文存儲在地圖中或僅用於特定的操作,因此這將影響傳遞此上下文的方法和時間。

我可以粗略地說,如果你使用它來構造一個將使用上下文的新對象,或者如果你有一個單例,在這個調用中請求上下文,如果你創建了你的類的多個實例,構造函數/工廠方法。

+0

我已經更新了設計細節的問題。請看看它。它設計不正確,因爲我正在嘗試使用一個上下文來偵聽多個客戶端/調用者? –

0

在我看來,您必須通過使用這些設備的特定Activitycontext。我假設你沒有將這些課程設爲Singleton

此外,如果你想使班級爲singleton我想你可以通過Application context而非Activity context,但我不知道這是否這會工作。

更新:

參閱此背景下Applicationhttp://developer.android.com/reference/android/app/Application.html

通常不需要繼承應用程序。在大多數情況下,靜態單例可以以更模塊化的方式提供相同的功能。如果你的單例需要一個全局上下文(例如註冊廣播接收者),那麼檢索它的函數可以被賦予一個上下文,該上下文在第一次構造單例時在內部使用Context.getApplicationContext()。

所以無論在哪個活動你是,你會通過這個Applicationcontext

+0

如何在SensorManager類中獲取應用程序上下文? –

+0

我已經更新了我的答案 – ingsaurabh

+0

我已經嘗試了一切,但沒有任何作品不會在我的情況下改變單獨的類庫項目需要上下文的情況。你有任何運行中的代碼或代碼嗎? –

相關問題