微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

java – InAppBilling活动和完成()

我在整合谷歌的应用内结算方面遇到了很多麻烦.

我有一个应该进行应用内结算的活动.我正在使用startActivity方法从我的主要活动中调用此活动.



Intent i = new Intent();
i.setComponent(new ComponentName("com.mypackage.mainactivity","com.mypackage.mainactivity.InAppBillingActivity"));                
startActivity(i);

调用mBillingService.requestPurchase(“android.test.purchased”,“10”)
in-app-Billing活动的onCreate方法中.



 public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        mHandler = new Handler();
        mInAppBillingPurchaSEObserver = new InAppBillingPurchaSEObserver(mHandler);
        mBillingService = new BillingService();
        mBillingService.setContext(this);

        ResponseHandler.register(mInAppBillingPurchaSEObserver);
        boolean supported = mBillingService.checkBillingSupported();
        System.out.println("onCreate.isBillingSupported " + supported);
        if(supported) {
            Log.i("AJ", "Calling requestPurchase");
            mBillingService.requestPurchase("android.test.purchased", "10");
        }
    }

由于in-app-Billing对服务器进行异步调用,所以我何时应该调用finish()来返回主活动.但我不希望活动结束,我仍然需要异步调用的结果.那么我该如何处理呢.

我在向服务器发送请求后调用了finish().但后来我得到了这个例外:


05-29 03:11:58.897: ERROR/ActivityThread(3549): Activity com.mypackage.mainactivity.InAppBillingActivity has leaked ServiceConnection com.mypackage.mainactivity.BillingService@45b0ad50 that was originally bound here
05-29 03:11:58.897: ERROR/ActivityThread(3549): android.app.ServiceConnectionLeaked: Activity com.mypackage.mainactivity.InAppBillingActivity has leaked ServiceConnection com.mypackage.mainactivity.BillingService@45b0ad50 that was originally bound here
05-29 03:11:58.897: ERROR/ActivityThread(3549):     at android.app.ActivityThread$PackageInfo$Servicedispatcher.(ActivityThread.java:1158)
05-29 03:11:58.897: ERROR/ActivityThread(3549):     at android.app.ActivityThread$PackageInfo.getServicedispatcher(ActivityThread.java:1053)
05-29 03:11:58.897: ERROR/ActivityThread(3549):     at android.app.ContextImpl.bindService(ContextImpl.java:908)
05-29 03:11:58.897: ERROR/ActivityThread(3549):     at android.content.Contextwrapper.bindService(Contextwrapper.java:347)
05-29 03:11:58.897: ERROR/ActivityThread(3549):     at android.content.Contextwrapper.bindService(Contextwrapper.java:347)
05-29 03:11:58.897: ERROR/ActivityThread(3549):     at com.mypackage.mainactivity.BillingService.bindToMarketBillingService(UnkNown Source)
05-29 03:11:58.897: ERROR/ActivityThread(3549):     at com.mypackage.mainactivity.BillingService.access$000(UnkNown Source)
05-29 03:11:58.897: ERROR/ActivityThread(3549):     at com.mypackage.mainactivity.BillingService$BillingRequest.runRequest(UnkNown Source)
05-29 03:11:58.897: ERROR/ActivityThread(3549):     at com.mypackage.mainactivity.BillingService.checkBillingSupported(UnkNown Source)
05-29 03:11:58.897: ERROR/ActivityThread(3549):     at com.mypackage.mainactivity.InAppBillingActivity.onCreate(UnkNown Source)
05-29 03:11:58.897: ERROR/ActivityThread(3549):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
05-29 03:11:58.897: ERROR/ActivityThread(3549):     at android.app.ActivityThread.performlaunchActivity(ActivityThread.java:2701)
05-29 03:11:58.897: ERROR/ActivityThread(3549):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2753)
05-29 03:11:58.897: ERROR/ActivityThread(3549):     at android.app.ActivityThread.access$2500(ActivityThread.java:129)
05-29 03:11:58.897: ERROR/ActivityThread(3549):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2107)
05-29 03:11:58.897: ERROR/ActivityThread(3549):     at android.os.Handler.dispatchMessage(Handler.java:99)
05-29 03:11:58.897: ERROR/ActivityThread(3549):     at android.os.Looper.loop(Looper.java:143)
05-29 03:11:58.897: ERROR/ActivityThread(3549):     at android.app.ActivityThread.main(ActivityThread.java:4701)
05-29 03:11:58.897: ERROR/ActivityThread(3549):     at java.lang.reflect.Method.invokeNative(Native Method)
05-29 03:11:58.897: ERROR/ActivityThread(3549):     at java.lang.reflect.Method.invoke(Method.java:521)
05-29 03:11:58.897: ERROR/ActivityThread(3549):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
05-29 03:11:58.897: ERROR/ActivityThread(3549):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
05-29 03:11:58.897: ERROR/ActivityThread(3549):     at dalvik.system.NativeStart.main(Native Method)

它没有退出应用程序,但它停止了InAppBillingActivity.

任何帮助都非常感谢.

谢谢,
阿卡什

P.S.:My Old Question,尚未解决…..

解决方法:

你应该使用startActivityForResult()
Context.StartActivityforResult URL

通过这种方式,您可以开始计费,让它执行异步回调,当它收到“成功”或“失败”时,您可以调用finish();发回结果.

In App Billing的另一个教程是:Simple InApp Billing,这为您提供了第二个视角,可能会帮助您了解BillingService正在尝试实现的目标.

编辑

对于’Simple InApp Billin’的错误
您在购买时收到错误,您可以在结算服务中找到错误的结果,否则在结算助手中您可以更新方法以停止此操作:

 protected static void verifyPurchase(String signedData, String signature) {
            ArrayList<VerifiedPurchase> purchases = BillingSecurity.verifyPurchase(signedData, signature);
            if(purchases != null && !purchases.isEmpty()){ // Check for NPE
                    latestPurchase = purchases.get(0);

                    confirmTransaction(new String[]{latestPurchase.notificationId});
            } else {
                    Log.d(TAG, "BillingHelper.verifyPurchase error. purchases was null");
            }

            if(mCompletedHandler != null){
                    mCompletedHandler.sendEmptyMessage(0);
            } else {
                    Log.e(TAG, "verifyPurchase error. Handler not instantiated. Have you called setCompletedHandler()?");
            }
    }

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐