安装后允许第三方 extensions/plugins 用于我的 Android 应用程序 - 低功耗蓝牙

Allow third party extensions/plugins for my Android app after installation - Bluetooth Low Energy

我查看了堆栈溢出中与此主题相关的几篇文章,我能得到的最接近的是使用内容提供商在 APK 之间共享数据。

我想要做的是首先安装我的应用程序,该应用程序扫描并连接到符合 BT SIG 标准的低功耗蓝牙健康设备。我试图支持的是添加插件来处理第三方专有健康设备。

我需要能够查询此类已安装的插件或扩展。我将需要从插件中获取一些信息,例如他们专有服务的 UUID,以便我可以从该设备获取广告。

然后我需要将广告传递给该插件。该插件将连接并处理设备,并将 return 某些信息返回到我的应用程序,包括测量数据。请注意,该插件必须使用几个 Android-特定的 BTLE API;它不会是基本的 Java 代码!

这些第三方插件将独立开发,用户可以在它们可用时下载它们,从而增加对专有设备的支持。

可以清楚地在 Windows 或 Linux 上为 Java 应用程序添加插件。但是,这甚至可以在 Android 上执行吗?如果有人能指出正确的文档、教程等,我将不胜感激。我无法在我的 google 搜索中将正确的单词放在一起来找到它。

也许唯一的解决方案是创建第二个 APK 并通过 'privatized' 广播接收器进行通信?如果有某种类型的插件支持,我相信它会让生活更轻松。

====================== 进一步的考虑===================== ====== 这里的目标是拥有可添加的专有服务来处理我的处理程序不处理的专有蓝牙健康设备(它只处理标准)。专有服务从我的应用程序获取广告信息,连接到设备,获取数据,然后在回调中将其发回。

问题来了:这样的服务可以有多个,我不知道它们的名字,也不知道有多少个。但是,它们都实现相同的 IPC 接口(通用 AIDL 文件)。我怎样才能知道有多少这样的服务?这是只有 BroadcastReceiver 才能处理的工作吗?

How can I find out how many such services there are?

您可以使用 PackageManager 进行这种内省。给定一些 Android R's changes in this area,你可能想这样做:

  1. <intent-filter> 添加到 <service>,宣传您将用于所有此类服务的自定义 Intent 操作。

  2. 使用 PackageManagerqueryIntentServices() 查找实现 <intent-filter>.

  3. 的所有服务

您可以在 this sample app 中查看其基本机制。在我的例子中,我碰巧选择了我的 IDownload 接口的完全限定 class 名称作为我的自定义操作字符串,但这当然不是必需的。就我而言,我只期待一项这样的服务。

用于检查服务是否由预期的签名密钥签名的奖励积分,因此恶意软件不会尝试提供服务并诱使您使用它。 This sample app 扩展了前一个并处理了它。但是,这些示例有点旧,因此 Android.

的更新版本可能需要额外的工作

FWIW,this book.

涵盖了这两个示例