2012-02-15 72 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將其註冊爲將其整合到應用程序體驗中。

這是您要查找的信息嗎?