Mặc dù Google đã xác nhận đã vận chuyển các bản cập nhật có sửa chữa, nhưng khối try catch theo sau ít nhất ngăn chặn sự sụp đổ
int querySkuDetails(String itemType, Inventory inv, List<String> moreSkus)
throws RemoteException, JSONException {
logDebug("Querying SKU details.");
ArrayList<String> skuList = new ArrayList<String>();
skuList.addAll(inv.getAllOwnedSkus(itemType));
if (moreSkus != null) {
for (String sku : moreSkus) {
if (!skuList.contains(sku)) {
skuList.add(sku);
}
}
}
if (skuList.size() == 0) {
logDebug("queryPrices: nothing to do because there are no SKUs.");
return BILLING_RESPONSE_RESULT_OK;
}
// NullPointer crash reported through PlayStore forums
if (mService == null) {
return IABHELPER_SERVICE_UNAVAILABLE;
}
Bundle querySkus = new Bundle();
querySkus.putStringArrayList(GET_SKU_DETAILS_ITEM_LIST, skuList);
try {
Bundle skuDetails = mService.getSkuDetails(3, mContext.getPackageName(), itemType, querySkus);
if (!skuDetails.containsKey(RESPONSE_GET_SKU_DETAILS_LIST)) {
int response = getResponseCodeFromBundle(skuDetails);
if (response != BILLING_RESPONSE_RESULT_OK) {
logDebug("getSkuDetails() failed: " + getResponseDesc(response));
return response;
}
else {
logError("getSkuDetails() returned a bundle with neither an error nor a detail list.");
return IABHELPER_BAD_RESPONSE;
}
}
ArrayList<String> responseList = skuDetails.getStringArrayList(RESPONSE_GET_SKU_DETAILS_LIST);
for (String thisResponse : responseList) {
SkuDetails d = new SkuDetails(itemType, thisResponse);
logDebug("Got sku details: " + d);
inv.addSkuDetails(d);
}
return BILLING_RESPONSE_RESULT_OK;
}
// Security Exception due to missing permissions reported through PlayStore forums
catch (SecurityException e)
{
return IABHELPER_SERVICE_UNAVAILABLE;
}
}
Xin lưu ý rằng sự thay đổi duy nhất trong phương pháp int querySkuDetails (Str ing itemType, Invory inv, List moreSkus) là khối try try của ngoại lệ bảo mật. Phần còn lại mọi thứ vẫn giữ nguyên.
Nguồn
2016-07-28 03:31:21
Đó có thể là những gì ngoại lệ cho biết, bạn thiếu quyền READ_PHONE_STATE –
Tôi nghĩ có nhiều khả năng nó nằm trong Tệp kê khai nhưng chưa được cấp trên thiết bị Marshmallow. https://developer.android.com/training/permissions/requesting.html – DeeV
Hãy nhớ rằng mặc dù bạn đang nhắm mục tiêu Api-19, người dùng trên Marshmallow có thể thu hồi quyền sau khi cài đặt theo cách thủ công. –