android - 在服务中调用 getSystemService

标签 android android-service

我正在尝试编写一个服务来获取 Gear Live 上的心率,按照这里的问题 Get Heart Rate from "Sensor" Samsung Gear Live

如果我把这部分放在

    Log.d(TAG, "prepare to call getSystemService");
    mSensorManager = ((SensorManager)getSystemService(SENSOR_SERVICE));
    Log.d(TAG, "after calling getSystemService");

在 Activity 的 onCreate() 中,它工作正常。但如果我将其移至服务,它就会抛出 NPE。我试图在 `getSystemService 前面添加 this.,但没有帮助。任何提示,谢谢

最佳答案

我想通了,原因是在getSystemService里面,调用了这个函数:

 @Override
public Object getSystemService(String name) {
    return mBase.getSystemService(name);
}

其中 mBase 为空。这是一个 Context 对象。所以我不得不将启动服务的 Activity 的上下文放在 onCreate() 中。代码如下:

 public HeartRateMonitorService(Context context){
    super();
    mBaseConext = context;
}


@Override
public void onCreate() {
    super.onCreate();
    attachBaseContext(mBaseConext);
}

我不确定这是最佳解决方案,但它是一种解决方法。

关于android - 在服务中调用 getSystemService,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24970677/

相关文章:

android - 如何实现不同进程中Service和Activity之间的通信?

android - 安卓应用卸载后保留文件

java - 事件方法中的线程对象 : use class member or create local object?

android - 使用较新版本的 Glide Library(4.7.1) 导致绑定(bind)错误问题

java - (Android) 无法将数据插入SQLite数据库

java - AIDL 接口(interface)找不到 Parcelable 类的导入

Android Chronometer,保留时间状态(并在后台继续计数)

android - 无法获取 SAMSUNG S4 native 浏览器历史记录

android - 当我开始一项 Activity 时如何杀死 CountDownTimer?

android - 如何判断哪个Activity启动了某个服务?