En la aplicación Problemas con problemas pendientes y actividades de conmutación

Ok, así que he estado tratando de arreglar esto durante días, y no voy a venir aquí buscando a alguien para hacer mi trabajo para mí, ya que he sido la solución de problemas y fijado cada mensaje de error en el LogCat. Estoy desarrollando un juego con Android usando Andengine (esto podría ser parte del problema por lo que estar familiarizado con él podría ayudar). No estoy haciendo nada demasiado elegante, mis actividades de juego son solo escena y no tienen ninguna Física o algo así, sólo un montón de sprites y texturas. También utilicé Andengine para todas las otras actividades en mi juego porque encuentro que es una manera muy fácil de fijar pantallas gráficamente atractivas. Una de esas pantallas es mi tienda en la aplicación, donde los usuarios pueden comprar packs de nivel y nuevos sprites. La parte de facturación de todo esto funciona muy bien, las compras van al mercado y no hay nada demasiado complicado allí …

Cuando el usuario hace clic en comprar, la pantalla del mercado aparece y carga el producto que han seleccionado (estos son productos reales, no las pruebas de Android, aunque el juego no se publica). La pantalla Market aparece sobre la actividad actual, sin importar si utilizo la implementación de "Android 2.0" donde es parte de la pila del juego o uso la implementación "Android 1.6" y es parte de su propia pila. Yo preferiría usar la implementación de Android 2.0, pero si sólo puedo obtener el 1.6 para trabajar, lo tomaré. De todos modos, el problema surge cuando el usuario cancela la compra con el botón de retroceso o completa la compra con una tarjeta de crédito, ambos resultan en la desaparición de la pantalla del mercado y la aplicación comienza una nueva actividad que es sólo una pantalla negra Y hace que una fuerza cierre). La compra pasa a través de OK, pero el usuario no recibe el producto porque la fuerza del juego se cierra antes de llegar al código para cambiar los elementos del usuario en el juego. Ahora para un cierto código, utilicé este tutorial (http://www.anddev.org/advanced-tutorials-f21/simple-inapp-billing-payment-t52060.html) sin cambiar mucho de cualquier cosa. La clase BillingHelper es más importante, ya que contiene el método requestPurchase () y los métodos startBuyPageActivity (). Llamo a la compra de la solicitud de mi actividad de StoreFront como esto:

BillingHelper.requestPurchase(StoreFront.this, itemID); 

Y en el onCreate del StoreFront tengo esta materia (según lo dicho para hacer por el tut):

  startService(new Intent(mContext, BillingService.class)); BillingHelper.setCompletedHandler(mTransactionHandler); 

 //some handler that billing needs public Handler mTransactionHandler = new Handler(){ public void handleMessage(android.os.Message msg) { Log.i(TAG, "Transaction complete"); Log.i(TAG, "Transaction status: "+BillingHelper.latestPurchase.purchaseState); Log.i(TAG, "Item purchased is: "+BillingHelper.latestPurchase.productId); if(BillingHelper.latestPurchase.isPurchased()){ //TODO do something here if we've completed our latest purchase, //this should be with the status bar notifications and //saved preferences } }; }; 

Así que no creo que el problema esté ahí. Aquí están las partes relevantes de BillingHelper

 protected static void requestPurchase(Context activityContext, String itemId){ if (amIDead()) { return; } Log.i(TAG, "requestPurchase()"); Bundle request = makeRequestBundle("REQUEST_PURCHASE"); request.putString("ITEM_ID", itemId); try { Bundle response = mService.sendBillingRequest(request); //The RESPONSE_CODE key provides you with the status of the request Integer responseCodeIndex = (Integer) response.get("RESPONSE_CODE"); //The PURCHASE_INTENT key provides you with a PendingIntent, which you can use to launch the checkout UI PendingIntent pendingIntent = (PendingIntent) response.get("PURCHASE_INTENT"); //The REQUEST_ID key provides you with a unique request identifier for the request Long requestIndentifier = (Long) response.get("REQUEST_ID"); Log.i(TAG, "current request is:" + requestIndentifier); C.ResponseCode responseCode = C.ResponseCode.valueOf(responseCodeIndex); Log.i(TAG, "REQUEST_PURCHASE Sync Response code: "+responseCode.toString()); startBuyPageActivity(pendingIntent, new Intent(), activityContext); } catch (RemoteException e) { Log.e(TAG, "Failed, internet error maybe", e); Log.e(TAG, "Billing supported: "+isBillingSupported()); } } 

Que he intentado llamar desde StoreFront con una variedad de argumentos como "ActivityContext", como StoreFront.this, getApplicationContext (), una tienda de contexto estático en otra parte, una actividad estática almacenada en otro lugar, getBaseContext () todo lo que podría posible pensar en …

Aquí está la otra actividad relevante

 private static void startBuyPageActivity(PendingIntent pendingIntent, Intent intent, Context context){ //android 1.6 method try { pendingIntent.send(context, 0, intent); } catch (CanceledException e){ Log.e(TAG, "startBuyPageActivity CanceledException"); } } 

Nada extravagante, sólo quiero que el usuario sea devuelto a cualquiera de mis diversas actividades (preferiblemente StoreFront) cuando compran el artículo o presionan de nuevo durante el proceso. ¡AYUDA POR FAVOR!

Editar: Quiero que cualquier solución posible permita que la facturación en la aplicación vuelva a mi aplicación una vez finalizada la compra, incluso la solución más confusa.

EDITAR

Un logcat y el método de llamadas de lo que el problema:

  "BillingService Starting", BillingHelper.setCompletedHandler(), StoreFront.onStart() called, StoreFront.onResume() called, "BillingService Service starting with onCreate", "BillingService Market Billing Service Successfully Bound", "BillingService Market Billing Service Connected", BillingHelper.instantiateHelper(), then this is where I actually click the buy button in the store (all of that runs just when opening StoreFront): BillingHelper.setCompletedHandler(), BillingHelper.isBillingSupported(), BillingHelper.amIDead(), BillingHelper.makeRequestBundle(), "BillingService isBillingSupported response was: RESULT OK", BillingHelper.requestPurchase(), BillingHelper.amIDead(), "BillingService requestPurchase()", BillingHelper.makeRequestBundle(), "BillingService current request is ......", "BillingService REQUEST PURCHASE Sync Response code: RESULT OK", BillingHelper.startBuyPageActivity(), "BillingService Recieved action: com.android.vending.billing.RESPONSE CODE", "BillingService checkResponseCode got requestID..." "BillingService checkResponseCode go responseCode RESULT ERROR" (this is because I can't purchase on this device), and then I get an Error message saying: "E 32427 Surface surface (identity=5925) is invalid, err=-19 (No such device)" and from there nothing works anymore. 

También he probado esto en un diverso teléfono (otro revelador que estoy trabajando con, que puede realmente comprar cosas en él pero todavía consigue el error negro de la pantalla) y él nunca consiguió los mensajes del manipulador que usted mencionó en su comentario tampoco

Edit: si tuviera que adivinar dónde está el error, diría que es esto

 06-16 11:20:23.635: DEBUG/dalvikvm(3807): GC_EXPLICIT freed 53K, 45% free 3710K/6663K, external 1K/513K, paused 102ms 06-16 11:20:23.885: ERROR/Surface(3807): surface (identity=158) is invalid, err=-19 (No such device) 06-16 11:20:23.905: ERROR/Surface(3807): surface (identity=158) is invalid, err=-19 (No such device) 06-16 11:20:23.905: ERROR/Surface(3807): surface (identity=158) is invalid, err=-19 (No such device) 06-16 11:20:23.905: ERROR/Adreno200-EGL(3807): egliSwapWindowSurface: unable to dequeue native buffer 

Tenga en cuenta que la excepción interrumpida es esperada por la biblioteca Andengine por lo que es un arenque rojo.

También (espero que esto se permite en aquí) voy a ofrecer recompensa paypal por una solución. Si esto está en contra de los Términos de SO, entonces simplemente elimine esta línea, por favor no cierre esta pregunta.

Puedo saber lo que está mal y tengo una prueba para que lo haga. La pantalla de compra ejecuta una llamada final después de que el usuario cancela la compra o completa la compra. Para mí, por alguna razón, la llamada de llegada fue deriva hacia abajo en la actividad actualmente en ejecución y (CLOSING ??? it).

Aquí está la línea relevante del registro:

06-16 11: 20: 22.774: WARN / ActivityManager (132): Solicitud de finalización duplicada para HistoryRecord {40ace828 com.android.vending / .billing.InAppBuyPageActivity}

Creo que lo arreglé esto en mi problema de código es que no puedo recordar exactamente lo que hice (tal vez no llame a terminar en mi comprador completo manejar …)

No sé nada acerca de Andgen, pero ¿qué pasaría si una llamada de llegada se convocó a la actividad principal de Andgen? Me imagino que detendría la ejecución y que podría obtener una pantalla en negro y una caída de la aplicación.

Así que para probar esto, crear una actividad independiente para comprar página. No tiene por qué ser complicado – tal vez lo tienen sólo comprar un producto enlatado después de que se inicia. Ejecutar el código y ver si todavía le da la pantalla de doom negro. Mi apuesta: puede salir de la actividad de nuevo a su juego, pero creo que va a funcionar.

¡Espero que esto ayude y buena suerte!

  • ¿Cómo utilizar la fuente y el texto en andEngine?
  • Cómo girar una sinusoide en el eje
  • AndEngine cámara offset y 2 escenas
  • Andengine: destinguish entre OnAreaTouched y OnSceneTouched
  • Imagen de fondo de AndEngine
  • AndEngineRuntimeException: dispositivo intrínsecamente incompatible detectado.
  • Servicios de Google Play no disponibles debido al error 2
  • Muestras en AndEngine
  • ¿Por qué estoy recibiendo un error? El canal está irreparablemente roto y se eliminará.
  • Android Toast Mensajes no funcionan
  • ¿Debo usar cocos2D o andengine?
  • Interesting Posts
    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.