自定义系统服务的上下文错误

时间:2016-08-23 13:34:52

标签: android android-service android-source android-service-binding

我创建了一个与zigbee设备通信的系统服务。更新了API并在设备上创建了system.img并进行了刷新,并为android编程制作了自定义SDK。

在Mainactivity类中,

try {
        ZigbeeManager zm = (ZigbeeManager) getSystemService(Context.ZIGBEE_SERVICE);
        zm.write("Hello World!\r");
    } catch (Exception ex) {
        Log.d(TAG, "Error in Zigbee Service: " + ex.toString());
    }

我收到“Context.ZIGBEE_SERVICE”字样的错误。当我把光标放在它上面时,它说“必须是:所有系统服务的列表”之一。 使用其他系统服务工作。此外,与其他系统服务一样,Context.class文件中也提供了Zigbee服务。

...
public static final String WIFI_SERVICE = "wifi";
public static final String WINDOW_SERVICE = "window";
public static final String ZIGBEE_SERVICE = "zigbee";

现在在设备上运行它。我在logcat上收到此错误消息。

01-01 12:09:24.126 6874-6874/com.jcxmej.uartcontrol D/UARTControl: Error in Zigbee Service: java.lang.NullPointerException: Attempt to invoke interface method 'int android.os.IZigbeeService.write(java.lang.String)' on a null object reference

该对象为空。是否需要初始化,但如何?但我认为它是Null,因为上下文没有正确链接。如何摆脱Context错误。或者在Context中正确添加Zigbee服务。

我用这个作为参考。 https://github.com/nayobix/add-new-hardware-hal-android-5-lollipop

1 个答案:

答案 0 :(得分:1)

注册框架内的系统服务时(假设您已经构建了服务),您需要做的不仅仅是添加服务的String名称,还需要执行下一个步骤进行:

  1. SystemServer.java注册您的服务(挖掘代码并将其添加到所有服务的try / catch列表中)。
  2. 将您的AIDL添加到frameworks/base/core/java/android/os/
  3. 将您的serivce文件名添加到frameworks/base/Android.mk内的构建中。
  4. 您可以在this精彩文章中看到更多信息。