2012-02-07 80 views
1

我是新來的論壇和android開發。獲取Android設備方向數據的問題

我一直在嘗試獲取設備方向數據,但似乎做錯了什麼。我一直在關注這個鏈接的教程:http://www.mail-archive.com/[email protected]/msg23415.html

然而,行

sensorManager = (SensorManager) getSystemService(SENSOR_SERVICE); 

給了我一個錯誤,SENSOR_SERVICE是不是有效的變量,所以我發現它是Context類的公共靜態變量,所以我用

sensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE); 

這給了我一個錯誤,getSystemService(String)不是我當前類的方法。我現在明白getSystemService(String)是Context的一種方法,所以我的問題是

1)什麼是 - 我認爲這是一個演員 - (SensorManager)做方法調用?

2)我是否必須獲取當前上下文並運行該方法?如果是的話如何?

我敢肯定,我正在反思這一點,但任何幫助和耐心非常感謝。

+0

只需將名稱「sensorManager」更改爲「msensor」,因爲默認管理器的SensorManager 未用作變量。 – NovusMobile 2012-02-07 09:51:58

回答

0

1)什麼是 - 我相信它是一個演員 - (SensorManager)在方法調用之前做的事情?

這確實是演員。這是必要的,因爲getSystemService被聲明爲返回一個無差別的Object類型(儘管它明顯地返回了更具體的東西)。

2)我是否必須獲取當前上下文並運行該方法?如果是的話如何?

在自定義View類中,可以使用getContext()。如果此代碼是另一種自定義類的一部分,則可以在構造函數中傳遞上下文。我建議在將上下文保存爲成員字段時使用getApplicationContext(),因爲Activity上下文應該可以隨意收集,如果活動從設備的方向更改中消失。

+0

1)由於這是有道理的 2)我使用的是目前正在寫一個遊戲cocos2D和我已經把這個代碼放在CCLayer子類的構造函數中。我這樣做是因爲這是唯一需要訪問傳感器的類,並且在不使用傳感器時可以輕鬆關閉傳感器。你的回答讓我覺得我應該把它放到GameActivity類中(這也是我在教程中看到的),然後呢?如果是這樣,我將如何從我的CCLayer子類訪問數據?在android中使用cocos2D實現方向傳感器的傳統方式是什麼? – mknutso2 2012-02-07 06:23:39

+0

@ mknutso2 - 我沒有編寫Android的cocos2D,但據我所知,你可以使用'CCDirector.sharedDirector()。context()'得到'Context'對象。 – 2012-02-07 06:36:54

+0

謝謝,我沒有考慮使用CCDirector,但它是有意義的,它會在那裏。我遇到的問題是在我的probject中.context()不是CCDirector的一種方法,但這可能是因爲我有一個過時的cocos2D版本。你能告訴我你是如何找到這種方法的? – mknutso2 2012-02-07 06:43:38

0

是,getSystemService()是語境的方法,以獲取上下文,使用,

getApplicationContext(); 

,或者使用當前的活動或服務,目的在於通過對獲取上下文:

ThisService.this.getSystemService(); 

ThisActivity.this.getSystemService(); 
+0

這兩個都沒有工作。 ThisService或ThisActivity都不顯示爲有效的命令。我試圖運行cocos2D項目中的CCLayer對象的構造函數中的代碼,如果這有所幫助。 – mknutso2 2012-02-07 06:01:55

+0

ThisService或ThisActivity應用程序組件的名稱,請參閱應用程序組件,這可能是活動的名稱或服務名稱代碼駐留在,不知道很多關於cocos2D上 – jeet 2012-02-07 06:59:58