2011-04-07 30 views
2

我在Android應用程序中實現了應用內結算。它適用於我自己的Android 2.2版本和市場2.3.4版本的設備。但它不適用於搭配Android 1.6和市場版本1002211的測試設備T-Mobile G1(奇怪的版本..但它具有應用內結算許可)。拋出異常:應用內結算不適用於G1

ERROR/Bundle(2079): readBundle: bad magic number 
ERROR/Bundle(2079): readBundle: trace = java.lang.RuntimeException 
     at android.os.Bundle.readFromParcelInner(Bundle.java:1473) 
     at android.os.Bundle.<init>(Bundle.java:82) 
     at android.os.Parcel.readBundle(Parcel.java:1344) 
     at android.os.Parcel.readBundle(Parcel.java:1329) 
     at android.os.Bundle$1.createFromParcel(Bundle.java:1410) 
     at android.os.Bundle$1.createFromParcel(Bundle.java:1413) 
     at com.android.vending.billing.IMarketBillingService$Stub$Proxy.sendBillingRequest(IMarketBillingService.java:102) 
     at MyAppPackages.BillingService$RestoreTransactions.run(BillingService.java:310) 
     at MyAppPackages.BillingService$BillingRequest.runIfConnected(BillingService.java:118) 
     at MyAppPackages.BillingService$BillingRequest.runRequest(BillingService.java:97) 
     at MyAppPackages.BillingService.restoreTransactions(BillingService.java:428) 
     at MyAppPackages.BillingActivity.restoreDatabase(BillingActivity.java:193) 
     at MyAppPackages.BillingActivity.access$000(BillingActivity.java:45) 
     at MyAppPackages.BillingActivity$PurchaseObserver.onBillingSupported(BillingActivity.java:107) 
     at MyAppPackages.ResponseHandler.checkBillingSupportedResponse(ResponseHandler.java:83) 
     at MyAppPackages.BillingService$CheckBillingSupported.run(BillingService.java:188) 
     at MyAppPackages.BillingService$BillingRequest.runIfConnected(BillingService.java:118) 
     at MyAppPackages.BillingService.runPendingRequests(BillingService.java:521) 
     at MyAppPackages.BillingService.onServiceConnected(BillingService.java:554) 
     at android.app.ActivityThread$PackageInfo$ServiceDispatcher.doConnected(ActivityThread.java:1053) 
     at android.app.ActivityThread$PackageInfo$ServiceDispatcher$RunConnection.run(ActivityThread.java:1070) 
     at android.os.Handler.handleCallback(Handler.java:587) 
     at android.os.Handler.dispatchMessage(Handler.java:92) 
     at android.os.Looper.loop(Looper.java:123) 
     at android.app.ActivityThread.main(ActivityThread.java:4203) 
     at java.lang.reflect.Method.invokeNative(Native Method) 
     at java.lang.reflect.Method.invoke(Method.java:521) 
     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:791) 
     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:549) 
     at dalvik.system.NativeStart.main(Native Method) 

請幫我理解發生了什麼。

回答

4

我遇到了同樣的問題在我的LG P500上有一個過時的市場...... 問題是計費服務的CheckBillingSupported子類的run()方法。

它會返回「真」,雖然市場並不支持開票......

響應代碼將產生0,因爲額外的場BILLING_RESPONSE_RESPONSE_CODE實際上並沒有設置 - 而是默認回到0;順便RESULT_OK也爲0。

int responseCode = response.getInt(Consts.BILLING_RESPONSE_RESPONSE_CODE); 

要解決此問題與調用替換:

int responseCode = response.getInt(Consts.BILLING_RESPONSE_RESPONSE_CODE, -123); 

這個固定我的問題。