获取已购买应用Android的列表

时间:2014-01-23 14:34:13

标签: android in-app-purchase in-app-billing google-play-services google-play

我目前正在开发一款列出所有已购买应用的应用(例如Google Play商店中的“已购买应用”)。 是否有解决方案来获取包含应用内结算的应用列表? 我们如何知道是否已购买应用程序? 这需要扎根手机吗?

感谢。

2 个答案:

答案 0 :(得分:1)

要获取支持应用内结算的已安装应用程序列表,您可以检查其权限:

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

这适用于非root电话。

对于“已购买的应用”,您的意思是指哪些已安装的应用已付费而且不是免费的?如果是这样,对于从Play下载的应用程序,因为我不认为Play应用程序支持任何此类Intent,我想唯一的方法是从API获取应用程序的价格(这将取决于国家!) this SO thread中列出的内容,例如here是如何使用android-market-api获取给定区域设置中的价格信息的示例。

答案 1 :(得分:0)

最有可能这是不可能的。您仍然可以尝试使用标准call to query all products和一个空的产品列表。它适用于拥有这些产品的应用程序。我从来没有尝试过它是否适用于任何应用程序,但你可以尝试一下。

// must be initialized first
IInAppBillingService service; 

// query products
Bundle skusBundle = new Bundle();
skusBundle.putStringArrayList("ITEM_ID_LIST", new ArrayList<String>());
Bundle response = service.getSkuDetails(3, "<package name>", "inapp", skusBundle);