Android自定义类别

时间:2010-04-21 07:33:01

标签: android android-manifest

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

我想以编程方式找出我的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),但它似乎不起作用。

我真的想用它来编码,以便在我的应用程序中发现已安装的活动。 你有什么想法怎么做? 谢谢

1 个答案:

答案 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