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;
}
}
}