2

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

我想以编程方式找出仅在我的 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 中动态读取 Activity1 和 Activity2,因为例如当我添加 Activity3 时,它将被自动读取。

Intent 意图 = new Intent("android.intent.action.VIEW"); intent.addCategory("example.custom.ACTIVITY"); 列表解析 = getPackageManager().queryIntentActivities(intent, 0);

在解决列表中,我希望有两个已定义的活动,因此我可以获得它们的标签和图像并为桌面创建图标

我认为这可以通过定义一个自定义类别 example.custom.ACTIVITY 来完成,并在 mainActivity 中使用 packageManager.queryIntentActivities(Intent intent, int flags) 但它似乎不起作用。

我真的很想对其进行编码以动态地发现我的应用程序中已安装的活动。你对如何做到这一点有任何想法吗?谢谢

4

1 回答 1

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”不是一个好的命名空间示例,因为清单中的包声明必须至少有两个段(见这里

于 2013-07-07T22:26:09.067 回答