Android之ResolveInfo

\samples\ApiDemos中含有大量的代码,其中首页ListActivity中核心代码如下:

List myData = new ArrayList();
Intent mainIntent = new Intent(Intent.ACTION_MAIN, null);
mainIntent.addCategory(Intent.CATEGORY_SAMPLE_CODE);
PackageManager pm = getPackageManager();
List list = pm.queryIntentActivities(mainIntent, 0);

实际上就是设置Intent,检索我们可能需要的Activities,结果存放在一个List中。在这里需要说明下Intent.CATEGORY_SAMPLE_CODE ,

public static final String CATEGORY_SAMPLE_CODE = "android.intent.category.SAMPLE_CODE";

实际上是定义了一个新的Category,然后在AndroidMasnifest.xml定义Activity中增加这种新的定义:

<category android:name=”android.intent.category.SAMPLE_CODE” />

这就是我们检索的“特殊”标志。

看到ResolveInfo,想必应该就是Activity信息的集合,到Android SDK中查看其详细说明:ResolveInfo就是解析intent过程中返回的信息,实际上就是AndroidManifest.xml 标签的信息,例举AndroidManifest.xml 中一个具体Aactivity标签的信息,如下:

<activity android:name=”.app.HelloWorld” android:label=”@string/activity_hello_world”>
<intent-filter>
<action android:name=”android.intent.action.MAIN” />
<category android:name=”android.intent.category.SAMPLE_CODE” />
</intent-filter>
</activity>
ResolveInfo实际上就是一个数据的集合,主要数据结构如下:


看到这些数据结构,就明白多了,详细信息还是到Android SDK中仔细阅读吧!如果我们将Activity的信息输出,显示如下:


获取Activity的链表并读取Activity的信息后,剩下的就是信息的检索:按照当前的路径,在Activity的链表中检索包含在这个路径的子文件夹或Activity,代码如下:

Intent activityIntent(String pkg, String componentName) /*相当与子文件夹*/
{
Intent result = new Intent();
result.setClassName(pkg, componentName);
return result;
}
Intent browseIntent(String path) /*相当与子文件夹*/
{
Intent result = new Intent();
result.setClass(this, ApiDemos.class);
result.putExtra(“com.example.android.apis.Path”, path);
return result;
}
其中activityIntent ()相当与文件,单击后启动这个Activity;browseIntent()相当与子文件夹,单击后需要继续检索包含在这个路径下的子文件夹或者Activity。这里采用了递归算法,例如,当path =“ ..\content\”,检索的信息输出如下:


看了上面程序运行过程中的输出信息,以及代码核心的解析,估计大家对程序的整体都会有个比较全面的认识了,轻松阅读代码的细节。

总结说明

ApiDemos类似于检索文件夹中包含的子文件夹或文件(实际上是Java中的Package),有了这个思路,分析这个程序就简单多了。在其中也学习到了很多新的知识,这些都是在Android SDK中没有说明的,毕竟Android SDK不可能面面俱到的,所以去深入学习Android SDK中包含的例子,会有很多新的收获。
当然ApiDemos中包含了大量的使用实例例子,这里先介绍整个程序的核心,起到抛砖引玉的作用,学习过程中发现一些经典的实例与大家慢慢分享。


参考:http://www.moandroid.com/?p=1095

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值