- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我在集成谷歌的应用内结算时遇到了很多麻烦。
我有一个应该进行应用内结算的 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/
我正在使用 Cordova 和这个插件,我目前正在 Google Play 上测试应用内购买。 这是插件地址: LINK HERE 当我使用时效果很好: function buy(){ //
我在 PlayStore 上确实有一个应用程序,但当前版本存在一个主要问题。每天我都会收到很多客户的邮件,说他们为 InAppItem 付款,但没有收到。 有两种表现形式: 客户收到来自 google
我在本地设置了“Dungeons”InAppBilling 示例,我准备尝试一下,但我有点困惑。我有一个这样的按钮: Button donate = (Button)findViewById(R.id
首先请原谅我的无知。尽管我找不到,但这个问题可能有一个非常明确的答案。别以为我没找过。实际上,我查看了网络,并试图在 StackOverFlow 上的 InAppPurchase 主题下找到答案。然而
我正在尝试将一些应用内购买添加到我正在开发的应用中,但进展并不顺利。 我有一个像这样的 FragmentActivity: public class TestInAppBilling extends
我正在使用 android InAppBilling 购买我的应用程序中的产品。我正在关注 https://developer.android.com/google/play/billing/bill
我在我的应用中设置了一个订阅产品,它可以用于购买。我在谷歌开发者控制台中看到了购买。当我注销然后重新登录应用程序时,我会再次进入订阅页面。该应用程序无法识别订阅已购买,它应该允许用户访问。如果我再次单
01-23 05:32:26.747: E/AndroidRuntime(14589): java.lang.NullPointerException 01-23 05:32:26.747: E/An
永远不会调用回调方法 onPurchaseStateChange。我做了自己的演示应用程序,还尝试使用谷歌提供的演示(地下城)。 我从 onClick 方法调用 requestPurchase(Str
我在集成谷歌的应用内结算时遇到了很多麻烦。 我有一个应该进行应用内结算的 Activity 。我使用 startActivity 方法从我的主要 Activity 中调用此 Activity 。 In
我正在尝试制作一个 inappbilling 演示。我跟着这个tutorial为了研究这个。 让我说说我完成这个任务所遵循的步骤 我使用了下面提到的代码 package com.ohn.inappbi
我使用 InAppBilling-V3 成功实现了 In App Billing图书馆。 我已经在我的 ProActivity 中实现了所有应用内结算, 成功完成购买后,我将共享首选项中的 bool
我一直在开发一个具有非常基本的 InAppBilling 需求的应用程序(用户可以购买该应用程序的 1 次升级)。我在测试期间遇到了一个让我感到困惑的问题。 在使用 android.test.purc
我正在我的 Android 应用中实现应用内结算。一切正常,但是,我正在尝试将广播接收器从 Activity 中解耦到 list 中。特别是在 Android 的 trivialdrive 示例中有这
我正在尝试通过使用 plugin InAppBilling 为 Xamarin 表单解决方案实现(应用内计费) 除了this one,我找不到这个插件的任何完整代码示例或文档。 我一步一步地按照说明操
根据开发者网站上的文档,我最近在我的应用程序中实现了 InAppBilling v3。我使用了 TRIVIAL DRIVE 示例中提供的 utils 包中的类。 我面临的问题是,如果用户已经在另一台设
我有以下方法(第一次工作正常): public void TipUs(){ String sku="tip_us"; try { Bundle buyIntentBundle
我花了一周时间寻找在 Android InAppBilling 上升级/降级订阅的解决方案。 关于这个函数有一个引用页面:http://developer.android.com/google/pla
我已经创建了 inallbilling 示例代码。出于测试目的,我已经通过了 SKU="android.test.purchases"但现在我想在 google play 商店上发布我的应用程序所以我
我在我的项目中实现了应用内结算,但有时它会给出以下 NullPointerException IabHelper.launchPurchaseFlow() 方法。目前我正在使用保留 ID 进行测试并且
我是一名优秀的程序员,十分优秀!