所以我想构建一个可扩展的 android 应用程序,开发人员可以在其中添加“CustomDevice”类,主程序将自动运行它们而无需编辑现有代码。
我已经阅读了有关服务提供者接口的信息,并认为这将是一个很好的解决方法。
所以我对其进行了测试并创建了一个名为“ICustomDevice”的接口,自定义设备类有望实现。
我创建了一个名为“DummyDevice”的类,它实现了 ICustomDevice。
DummyDevice 和 ICustomDevice 都在同一个包“CustomDevicePackage”中。
所以在我的主程序中,我运行以下命令。
ServiceLoader<ICustomDevice> loader = ServiceLoader.load(ICustomDevice.class);
Iterator<ICustomDevice> devices = loader.iterator();
System.out.println("Does it have devices? " + devices.hasNext());
它总是返回 false,这意味着它没有找到“DummyDevice”
在我的 Eclipse 项目中,我在“src”创建了一个名为 META-INF 的文件夹,并在其下创建了一个名为“services”的子文件夹。
“服务”有一个名为“CustomDevicePackage.ICustomDevice”的文件,其中包含一行内容“CustomDevicePackage.DummyDevice”。
我做对了吗?我看到的每个关于 SPI 的例子都是关于加载 JARS。我没有加载 JAR,我正在尝试在同一个项目中运行一个类。此方法是否仅适用于加载 JAR?我希望我的程序支持加载本地子类和外部 JAR。