我将在我的 Android 应用程序中实现插件模式。
现在我已经创建了:
public abstract class PluginReceiver extends BroadcastReceiver
在外部插件中有例如
public class SmsPluginReceiver extends PluginReceiver
PluginReceiver
类还包含一些方法,如 getIcon
、getName
等。
SmsPluginReceiver
在 AndroidManifest.xml
中注册为具有指定 intent-filter 操作的接收器:
<receiver android:name=".plugin.sms.SmsPluginReceiver">
<intent-filter>
<action android:name="hsz.project.plugin" />
</intent-filter>
</receiver>
在主应用程序中,我正在使用 PackageManager
搜索所有可用的插件:
PackageManager manager = getPackageManager();
Intent intent = new Intent("hsz.project.plugin");
List<ResolveInfo> matches = manager.queryBroadcastReceivers(intent, 0);
我得到了一个 ResolveInfo
对象。
我完全不知道我应该用它做什么 - 如何访问 SmsPluginReceiver
数据(图标、名称、...)?
最佳答案
Android 中的插件架构可能非常棘手。有多棘手取决于您需要什么方法。我有一个项目,他们想将插件 fragment 集成到主要应用程序 Activity 中。如果您采用这种方法,则必须使用与主应用程序相同的 key 对插件进行签名。
如果你可以通过简单地启动 Activity 来集成插件,那么我会推荐使用 PendingIntents。不知何故,您必须让您的插件将 PendingIntents 注册到插件插槽中才能激活它们。我使用包管理器来识别新插件,向它发送一个指示它注册自己的 Intent ,然后公开一个 ContentProvider 以便它可以注册自己。然后,我调用了它注册的 PendingIntent,以将其集成到应用体验中。
这就是您要查找的信息吗?
关于安卓插件模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9293657/