/** * 获取当前安装的dock风格包基础信息,每次重新扫描,调用者调用完后要对此返回列表清空 * * @return */ public ArrayList<StyleBaseInfo> getAllStyleBaseInfos() { ArrayList<StyleBaseInfo> mList = new ArrayList<StyleBaseInfo>(); Intent intent = new Intent(ICustomAction.ACTION_PKG_NAME); intent.addCategory(Intent.CATEGORY_DEFAULT); PackageManager pm = mContext.getPackageManager(); List<ResolveInfo> styles = pm.queryIntentActivities(intent, PackageManager.MATCH_DEFAULT_ONLY); int size = styles.size(); for (int i = 0; i < size; i++) { String appPackageName = styles.get(i).activityInfo.packageName; String appName = (String) pm.getApplicationLabel(styles.get(i).activityInfo.applicationInfo); if (null != appPackageName && null != appName) { DockStylePkgInfo info = new DockStylePkgInfo(); info.mPkgName = appPackageName; info.mStyleName = appName; mList.add(info); } } styles.clear(); styles = null; return mList; }
/** * 获取指定风格包具体信息 * * @param pkgString 风格包名 * @return 指定风格包具体信息.找不到返回null */ public DockStylePkgInfo getDockStylePkgInfo(String pkgString) { if (null == pkgString) { return null; } PackageManager pm = mContext.getPackageManager(); try { PackageInfo pkgInfo = pm.getPackageInfo(pkgString, PackageManager.GET_ACTIVITIES); InputStream inputStream = XmlParserFactory.createInputStream(mContext, pkgString, DockStylePkgInfo.CONFIG_XML); // if(null == inputStream) // { // 找不到文件,判断为版本过旧 // Toast.makeText(mContext, // mContext.getString(R.string.change_dock_version_tip), // Toast.LENGTH_SHORT).show(); // } XmlPullParser xmlPullParser = XmlParserFactory.createXmlParser(inputStream); DockStylePkgInfo info = new DockStylePkgInfo(); // 拿基本属性 info.mPkgName = pkgString; info.mStyleName = (String) pm.getApplicationLabel(pkgInfo.applicationInfo); if (xmlPullParser != null) { // 解析XML得到更多属性 IStyleParser parser = new DockStyleParser(); parser.parseXml(xmlPullParser, info); parser = null; } // 关闭inputStream if (inputStream != null) { try { inputStream.close(); } catch (IOException e) { } } return info; } catch (NameNotFoundException e) { return null; } }