gpt4 book ai didi

java - InAppBilling Activity 和 finish()

转载 作者:太空宇宙 更新时间:2023-11-03 10:55:32 25 4
gpt4 key购买 nike

我在集成谷歌的应用内结算时遇到了很多麻烦。

我有一个应该进行应用内结算的 Activity 。我使用 startActivity 方法从我的主要 Activity 中调用此 Activity 。



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

并调用mBillingService.requestPurchase("android.test.purchased", "10")在应用内结算 Activity 的 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() 返回到主要 Activity 。但我不希望 Activity 结束,我仍然需要异步调用的结果。那么我该如何处理呢。

我在向服务器发送请求后调用了 finish()。但后来我得到了这个异常(exception):


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。

非常感谢任何帮助。

谢谢,阿卡什

附注:My Old Question , 仍未解决.....

最佳答案

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

这样您就可以开始计费,让它执行异步回调,当它收到“成功”或“失败”时,您可以调用 finish();返回结果。

应用内结算的另一个教程是:Simple InApp Billing ,这为您提供了第二个视角,可能会帮助您了解 BillingService 试图实现的目标。

编辑

对于“Simple InApp Billin”的错误:您在购买时遇到错误,您可以在返回 false 的计费服务中发现此错误,否则在计费助手中您可以更新方法来停止此错误:

 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()?");
}
}

关于java - InAppBilling Activity 和 finish(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5498192/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com