ATAK插件概述与注册逻辑

插件概述

ATAK的插件是额外的Android应用程序,它们不能独立运行,而是依赖于ATAK应用内部的类。这通过特殊的类加载器在运行时将缺失的类文件从插件应用加入到ATAK进程中实现。

插件架构与结构

  • 架构特点:插件架构与在ATAK内部开发代码没有区别,所有ATAK组件使用相同的构建块和能力。
  • 插件结构:assets/plugin.xml包含了加载插件所需的信息。插件可以实现生命周期(Lifecycle)和/或工具(Tools)。生命周期与MapComponent紧密相关,而工具用于填充操作栏并描述通过点击图标触发的意图。
  • 上下文使用:开发过程中需要注意正确使用两种上下文——ATAK主上下文用于构造如AlertDialog等视觉组件;插件上下文用于查找特定于插件的资源和图形。

插件描述xml

<?xml version="1.0" encoding="utf-8"?>

<plugin>

    <extension

        type="transapps.maps.plugin.lifecycle.Lifecycle"

        impl="com.atakmap.android.helloworld.plugin.HelloWorldLifecycle"

        singleton="true" />

    <extension

        type="transapps.maps.plugin.tool.ToolDescriptor"

        impl="com.atakmap.android.helloworld.plugin.HelloWorldTool"

        singleton="true" />

</plugin>

从这个例子可以看到插件里包含Lifecycle和ToolDescriptor两个两种类型的extension。

插件注册主要逻辑

1、加载工具插件

private int loadToolDescriptorPlugins(Collection<PluginDescriptor> plugins, PluginLoadingProgressCallback progressCallback, int alreadyLoaded, int totalToLoad)

  • 目的:从给定的插件集合中加载所有的工具描述符,并通过回调函数报告加载进度。
  • 参数
    • plugins: 一个包含扫描过程中发现的插件的集合。
    • progressCallback: 当插件正在被加载时使用的进度回调接口。
    • alreadyLoaded: 已经加载的工具数量。
    • totalToLoad: 尝试加载的描述符总数。
  • 返回值:成功加载的描述符总数,这可能与插件总数不同。

2、加载生命周期插件

private int loadLifecyclePlugins(Collection<PluginDescriptor> plugins, PluginLoadingProgressCallback progressCallback, int totalToLoad)

  • 目的:根据提供的插件描述符集合加载插件,并通过回调函数报告加载进度。
  • 参数
    • plugins: 包含需要加载的插件描述符的集合。
    • progressCallback: 在加载插件时使用的进度回调接口。
    • totalToLoad: 尝试加载的插件总数,用于计算加载进度百分比。
  • 返回值:实际成功加载的插件数量。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值