大家好!
这是我关于
项目开发的第二篇文章。 对于那些尚未阅读
上一篇文章的人 :它是关于如何自动将数据从一个地方(谷歌表)导出到另一个地方(家)的信息。
今天,我将告诉您如何编写(和设计)该库,以便第三方应用程序可以接收由我的应用程序发送的数据。 我问每个有兴趣的猫。
第1部分。问题
简要介绍该项目。 有连接到智能手机的设备。 在我的应用中,神经网络在其中识别设备中的数据并给出结果。 还有其他一些应用程序希望获得这种结果。
结果可能有几种类型:来自设备的裸数据,来自设备的已处理数据,有关设备状态的信息,有关应用程序对数据的访问权的信息(例如,用户已撤销对设备数据的访问权)。 必须以某种方式将此结果转移到其他应用程序。
如果突然我用我的代码不正确地解释了某些内容-
这是我的图书馆
的文件 。
第2部分。规划解决方案
有一个很棒的机制-广播。 简而言之,这是从一个应用程序到其他应用程序的消息。 您可以立即将其发送给所有人,也可以将其发送给特定的人。
要发送和接收此业务,您需要:- 以某种方式从传递的对象制作JSON
- 提交广播
- 接受其他应用程序中的广播
- 从JSON恢复已传输的对象
通常,从对象制作JSON并不总是正确的。 您可以通过广播或可序列化发送名为“可拆分”的邮件。 可序列化是Java的标准配置,可打包是类似的配置,但针对移动设备进行了优化。
我的物体很小。 另外,通常有必要获取JSON:我本人编写了一个第三方应用程序,以便将原始数据发送到服务器。 因此,我选择了“从传递的对象制作JSON”。 也许那我会改变主意。
第3部分。锯解决方案
第1段和第4段。在JSON中,然后返回
这里的一切都很简单。 有一个
Gson库非常适合我们的需求。
为了使事情变酷,请重写toString()方法。 好吧,执行fromString()可以使我们的对象返回。
class SecureData(val eeg1: Double?, val eeg2: Double?, date: Date) { override fun toString(): String { val gson = Gson() return gson.toJson(this) } companion object { fun fromString(model: String): SecureData { val gson = Gson() return gson.fromJson(model, SecureData::class.java) } } }
点2.我们发送对象
这是这样的代码的示例:
val intent = Intent() intent.action = BroadcastUtils.BROADCAST_GESTURE intent.putExtra(BroadcastUtils.EXTRA_GESTRE, it.toString()) sendBroadcast(intent)
在这里,我们创建意图,设置其动作,放置对象并将其作为广播发送。
BroadcastUtils.BROADCAST_GESTURE-这是一件小事情,我们将通过它过滤另一个应用程序中的传入广播(无论是否应对其进行处理)。
要将消息发送到特定的应用程序,您需要另外指定以下内容:
intent.component = ComponentName( PermissionsFetcher.REFACE_APP, "${PermissionsFetcher.REFACE_APP}.receivers.ActionsReceiver" )
PermissionsFetcher.REFACE_APP是我的应用程序的APPLICATION_ID,而$ {PermissionsFetcher.REFACE_APP} .receivers.ActionsReceiver是接收者的路径。
点3.我们收到物体
这就是我们注册接收者的方式。 如果使用应用程序上下文注册它,它将接收广播,直到关闭应用程序。 如果您使用激活上下文-直到它关闭。
registerReceiver(GesturesReceiver(), IntentFilter(BroadcastUtils.BROADCAST_GESTURE))
这是GesturesReceiver: class GesturesReceiver : BroadcastReceiver() { override fun onReceive(context: Context, intent: Intent) { Timber.i("Received gesture") val action = BroadcastUtils.reparseGestureIntent(intent) MainApp.actionSubject.onNext(action) } }
如您所见,在这里,我收到了这个意图,将其重定义为一个对象,然后使用RxJava将其发送到某个地方。
第4部分。结论
您阅读了有关设计应与其他应用程序交互的应用程序的文章。 希望这种经验对您有所帮助。
为了提高效果,您可以查看我的库的源代码以及使用它的示例,并在需要时加一个星号:
github.com/reface-tech/CodeSpecialApp