2012-02-07 79 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