【发布时间】:2014-03-23 08:00:51
【问题描述】:
我一直在阅读并看到无法立即访问系统服务;必须在调用 onCreate() 后访问它们。
我正在创建键盘服务,但我想访问传感器等系统服务。有没有办法在没有活动的情况下做到这一点?
我已经尝试让我的类继承 InputMethodService 并实现 SensorEventListener。我实现了 onSensorChanged() 方法并告诉它打印到 logcat 但它从未被调用。我有一个方法 onCreateInputView() 我在其中定义了传感器管理器和加速度计:
public class MyInput extends InputMethodService implements SensorEventListener {
MyInputView MyInputView;
private SensorManager mSensorManager;
@Override
public View onCreateInputView() {
mSensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
final MyInputView MyInputView = (MyInputView) getLayoutInflater().inflate(R.layout.MyInput, null);
this.MyInputView = MyInputView;
return MyInputView;
}
@Override
public void onAccuracyChanged(Sensor sensor, int accuracy) {
// TODO Auto-generated method stub
}
@Override
public void onSensorChanged(SensorEvent event) {
// TODO Auto-generated method stub
Log.d("called", "called");
}
}
[根据给定的建议,InputMethodService 似乎是从 Context 派生的,因此,onCreate() 应该被调用...]
【问题讨论】:
-
有趣的问题。 InputMethodService 也继承自 Context,所以 getSystemService() 方法至少应该存在,并且它有一个 onCreate() 生命周期方法。如果你在 onCreate() 被调用后尝试使用这个 Context 获取你想要的服务会发生什么?
-
好的,设置更新的代码在哪里,没有触发的事件方法在哪里?在这一点上,集体信念似乎是您想要做的事情是可能的,因此问题出在您的尝试上,如果没有看到您正在尝试做什么,我们将无能为力让就这样工作。
-
@ChrisStratton 附件是我正在处理的
-
阅读文档。 getSystemService 是来自 Context 的方法。任何正确初始化(即启动后的活动或服务)都可以。
-
你从来没有给
mSensorManager.registerListener打电话?
标签: android android-activity accelerometer sensors