2010-04-21 51 views
2

我有一个视图作为应用程序的主屏幕,其中包含可用应用程序的操作,如图标+文本对(桌面一样)。Android自定义类别

我想找出编程什么活动只在我的AndroidManifest.xml中定义

假设我有:

< activity android:name="example.mainActivity" android:label="mainActivity"> 
    < intent-filter> 
     < action android:name="android.intent.action.MAIN" /> 
     < category android:name="android.intent.category.LAUNCHER" /> 
    < /intent-filter> 
< /activity> 
< activity android:name="example.activity1" android:label="Activity1"> 
    < intent-filter> 
     < action android:name="android.intent.action.VIEW" /> 
     < category android:name="example.custom.ACTIVITY" /> 
    < /intent-filter> 
< /activity> 
< activity android:name="example.activity2" android:label="Activity2"> 
    < intent-filter> 
     < action android:name="android.intent.action.VIEW" /> 
     < category android:name="example.custom.ACTIVITY" /> 
    < /intent-filter> 
< /activity> 

我想是在MainActivity到dinamically阅读活动1和活性2,因为当我添加Activity3例如它会被自动读取。

Intent intent = new Intent(“android.intent.action.VIEW”); intent.addCategory(“example.custom.ACTIVITY”); List resolves = getPackageManager()。queryIntentActivities(intent,0);

在做出决议列表我期望有两个定义的活动,所以我可以得到他们的标签,图像和桌面

我认为这可以通过定义一个自定义类别,例如完成创建图标。 custom.ACTIVITY,并在mainActivity中使用packageManager.queryIntentActivities(Intent intent,int flags),但它似乎没有工作。

我真的想编码,以便在应用程序中发现已安装的活动。 你有什么想法如何做到这一点? 谢谢

回答

1

在我的应用我所定义的动作为“android.intent.action.MAIN”(而不是“android.intent.action.VIEW”),并检索工作,你希望:

Intent intent = new Intent(Intent.ACTION_MAIN, null); 
intent.addCategory("com.example.ACTIVITY"); 
PackageManager pm = getPackageManager(); 
List<ResolveInfo> list = pm.queryIntentActivities(intent, 0); 

ps,我使用了“com.example”,因为“example”不是一个好的名称空间示例,因为清单中的包声明必须至少有两个段(请参见here