手机端已安装的apk文件 是指手机中装的所有应用。 手机内支持分享的应用 是指支持分享的应用(ACTION_SEND)。 范围比前者小。
ApplicationInfo与ResolveInfo比较:前者能够得到Icon、Label、meta-data、description。后者只能得到Icon、Label。
ApplicationInfo是从一个特定的应用得到的信息。这些信息是从相对应的Androdimanifest.xml的< application>标签中收集到的。
ResolveInfo这个类是通过解析一个与IntentFilter相对应的intent得到的信息。它部分地对应于从AndroidManifest.xml的< intent>标签收集到的信息。
下面讲一下这几个类综合在一起的具体应用:
通过调用PackageManager的方法可以得到两种不同的信息:
首先要得到manager:
PackageManager manager = getPackageManager();
Java代码:
List< ApplicationInfo> appList = manager.getInstalledApplications
Java代码:
Intent intent = new Intent(Intent.A CTION_MAIN,null);
intent.addCategory(Intent.CATEGORY_LAUNCHER);
List< ResolveInfo> appList = manager.queryIntentActivities(intent,0);
//它是通过解析< Intent-filter>标签得到有
< action android:name=”android.intent.action.MAIN”/>
< action android:name=”android.intent.category.LAUNCHER”/>
//这样的app,所以得到的要比第一种方法少(前者比它多那种service、previder等app)。
- /**
- * 查询手机内所有支持分享的应用
- * @param context
- * @return
- */
- public static List<ResolveInfo> getShareApps(Context context){
- List<ResolveInfo> mApps = new ArrayList<ResolveInfo>();
- Intent intent=new Intent(Intent.ACTION_SEND,null);
- intent.addCategory(Intent.CATEGORY_DEFAULT);
- intent.setType("text/plain");
- PackageManager pManager = context.getPackageManager();
- mApps = pManager.queryIntentActivities(intent,PackageManager.COMPONENT_ENABLED_STATE_DEFAULT);
- return mApps;
- }