我有一个视图作为应用程序的主屏幕,其中包含可用应用程序的动作,如图标+文本对(像桌面一样)。
我想以编程方式找出我的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方式读取Activity1和Activity2,因为当我添加Activity3时,它会被自动读取。
Intent intent = new Intent(“android.intent.action.VIEW”); intent.addCategory( “example.custom.ACTIVITY”); List resolves = getPackageManager()。queryIntentActivities(intent,0);
在解析列表中,我希望有两个已定义的活动,这样我就可以获得他们的标签和图像,并为桌面创建图标
我认为这可以通过定义自定义类别example.custom.ACTIVITY来完成,并且在mainActivity中使用packageManager.queryIntentActivities(Intent intent,int flags),但它似乎不起作用。
我真的想用它来编码,以便在我的应用程序中发现已安装的活动。 你有什么想法怎么做? 谢谢
答案 0 :(得分: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);
p.s。,我使用“com.example”,因为“example”不是一个好的命名空间示例,因为清单中的包声明必须至少有两个段(参见here)