Chociaż Google potwierdził, że wysyła aktualizację mającą poprawkę, ale następujący blok try catch przynajmniej zapobiega awarii
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;
}
}
Zwróć uwagę, że jedyna zmiana w sposobie int querySkuDetails (Str ing itemType, Inventory inv, List moreSkus) jest blokiem catch próby wyjątku bezpieczeństwa. Reszta wszystko pozostaje takie samo.
Prawdopodobnie to, co mówi wyjątek, brakujące prawo do odczytu READ_PHONE_STATE –
Myślę, że jest bardziej prawdopodobne, że jest w manifeście, ale nie zostało przyznane na urządzeniach Marshmallow. https://developer.android.com/training/permissions/requesting.html – DeeV
Pamiętaj, że nawet jeśli celujesz w Api-19, użytkownicy na Marshmallow mogą ręcznie odwołać uprawnienia po instalacji. –