Anche se Google ha confermato di aver spedito l'aggiornamento con la correzione, ma il seguente blocco try cattura almeno impedisce il crollo
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;
}
}
Si prega di notare che l'unico cambiamento nelle querySkuDetails metodo int (Str ing itemType, Inventory inv, List moreSkus) è il blocco try catch dell'eccezione Security. Riposa tutto rimane uguale.
fonte
2016-07-28 03:31:21
La sua probabilmente quello che dice l'eccezione, il vostro manca il permesso READ_PHONE_STATE –
credo che sia più probabile è nel manifesto, ma non è stato concesso su dispositivi Marshmallow. https://developer.android.com/training/permissions/requesting.html – DeeV
Ricorda che anche se hai come target Api-19, gli utenti su Marshmallow possono revocare manualmente l'autorizzazione dopo l'installazione. –