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