To get the list of installed applications supporting in-app billing, you can check for their permissions:
final List<PackageInfo> inAppBillingEnabledPackages = new ArrayList<PackageInfo>();
final PackageManager pm = getPackageManager();
final List<PackageInfo> installedAppInfo = pm.getInstalledPackages(PackageManager.GET_PERMISSIONS);
for (final PackageInfo packageInfo : installedAppInfo) {
if (packageInfo.requestedPermissions != null) {
for (final String permissionInfo : packageInfo.requestedPermissions) {
if ("com.android.vending.BILLING".equals(permissionInfo)) {
inAppBillingEnabledPackages.add(packageInfo);
}
}
}
}
// inAppBillingEnabledPackages now contains a list of packages supporting in-app billing
This works fine with a non-rooted phone.
As for "purchased apps", do you mean which installed apps have been paid for and are not free ? If so, for apps downloaded from Play, since I don't think the Play app supports any such Intent, I guess the only way would be to get the price of the app (which will depend on the country !) from an API like the ones listed in this SO thread, for example here's an example of how to get the price info in a given locale using android-market-api.