2012-02-15 54 views
1

我将在我的Android应用程序中实现插件模式。Android插件模式

现在我已经创建了:

public abstract class PluginReceiver extends BroadcastReceiver 

在外部插件有例如

public class SmsPluginReceiver extends PluginReceiver 

PluginReceiver类也包含了一些方法,如getIcongetName等。

SmsPluginReceiver注册在AndroidManifest.xml与特定意图的筛选器操作接收器:

<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数据(图标,名称,...)?

+0

不确定这是可能的。您可能需要发送有序广播,以便从每个已注册的接收器中检索这种信息 - http://developer.android.com/reference/android/content/Context.html#sendOrderedBroadcast%28android.content.Intent ,%20java.lang.String,%20android.content.BroadcastReceiver,%20android.os.Handler,%20int,%20java.lang.String,%20android.os.Bundle%29。否则,您可能需要设置您自己的接收器注册表。 – 2012-02-15 12:54:48

回答

2

Android中的插件体系结构可能非常棘手。有多棘手取决于你需要什么方法。我有一个项目,他们希望将插件碎片整合到主应用程序Activity中。如果采取这种方法,插件必须使用与主应用程序相同的密钥进行签名。

如果您可以通过简单启动活动来集成插件,那么我会推荐使用PendingIntents。不知何故,您必须让您的插件将PendingIntents注册到插件插槽中才能激活它们。我使用包管理器来识别新的插件,发送一个意图指示它自己注册的意图,然后暴露一个ContentProvider,以便它可以注册自己。然后我调用PendingIntent将其注册为将其整合到应用程序体验中。

这是您要查找的信息吗?