读取其他应用的manifest文件

来源:互联网 发布:illustrator mac下载 编辑:程序博客网 时间:2024/05/17 23:00


public class InterruptNotifyActivity extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        AssetManager mCurAm;
        List<PackageInfo> l = getPackageManager().getInstalledPackages(
PackageManager.GET_DISABLED_COMPONENTS);
for (PackageInfo pi : l) {
if ((pi.applicationInfo.flags & ApplicationInfo.FLAG_SYSTEM) == 0) {
try {
mCurAm = createPackageContext(pi.packageName, 0)
.getAssets();
Resources mCurResources = new Resources(mCurAm,
getResources().getDisplayMetrics(), null);
XmlResourceParser xml = mCurAm
.openXmlResourceParser("AndroidManifest.xml");
String str = getXMLText(xml, mCurResources);
if (str != null) {


System.out.println(pi.packageName+" manifest begin");
System.out.println(str);
System.out.println(pi.packageName+" manifest end");
System.out.println("***************************************************************");
System.out.println("\n\n\n");
}
} catch (NameNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

}
    }
    


private String getXMLText(XmlResourceParser xrp, Resources currentResources) {
StringBuffer sb = new StringBuffer();
int indent = 0;
try {
int eventType = xrp.getEventType();
while (eventType != XmlPullParser.END_DOCUMENT) {
// for sb
switch (eventType) {
case XmlPullParser.START_TAG:
indent += 1;
sb.append("\n");
insertSpaces(sb, indent);
sb.append("<" + xrp.getName());
sb.append(getAttribs(xrp, currentResources));
sb.append(">");
break;
case XmlPullParser.END_TAG:
indent -= 1;
sb.append("\n");
insertSpaces(sb, indent);
sb.append("</" + xrp.getName() + ">");
break;


case XmlPullParser.TEXT:
sb.append("" + xrp.getText());
break;


case XmlPullParser.CDSECT:
sb.append("<!CDATA[" + xrp.getText() + "]]>");
break;


case XmlPullParser.PROCESSING_INSTRUCTION:
sb.append("<?" + xrp.getText() + "?>");
break;


case XmlPullParser.COMMENT:
sb.append("<!--" + xrp.getText() + "-->");
break;
}
eventType = xrp.nextToken();
}
} catch (IOException ioe) {
} catch (XmlPullParserException xppe) {
}
return sb.toString();
}

protected void insertSpaces(StringBuffer sb, int num) {
if (sb == null)
return;
for (int i = 0; i < num; i++)
sb.append(" ");
}


private CharSequence getAttribs(XmlResourceParser xrp,
Resources currentResources) {
StringBuffer sb = new StringBuffer();
for (int i = 0; i < xrp.getAttributeCount(); i++)
sb.append("\n" + xrp.getAttributeName(i) + "=\""
+ resolveValue(xrp.getAttributeValue(i), currentResources)
+ "\"");
return sb;
}


private String resolveValue(String in, Resources r) {
if (in == null || !in.startsWith("@") || r == null)
return in;
try {
int num = Integer.parseInt(in.substring(1));
return r.getString(num);
} catch (NumberFormatException e) {
return in;
} catch (RuntimeException e) {
// formerly noted errors here, but simply not resolving works better
return in;
}
}
    
    
}