Java onDestroy关闭计费客户端的实现

Java onDestroy关闭计费客户端的实现,java,android,in-app-billing,Java,Android,In App Billing,我试图做一个例子播放计费应用程序描述 在最后一步中,他们描述了 要清除所有资源并注销观察者,只需调用BillingClient.endConnection。因此,请在BillingManager中使用此调用定义一个方法,然后从GamePlayActivity.onDestroy调用它: 根据以上信息,我在BillingManagerjava类中创建了这样一个名为destroy的函数 public void destroy() { mBillingClient.endConnect

我试图做一个例子播放计费应用程序描述

在最后一步中,他们描述了

要清除所有资源并注销观察者,只需调用BillingClient.endConnection。因此,请在BillingManager中使用此调用定义一个方法,然后从GamePlayActivity.onDestroy调用它:

根据以上信息,我在
BillingManager
java类中创建了这样一个名为
destroy
的函数

public void destroy() {
        mBillingClient.endConnection();
    }
我完整的BillingManager课程如下所示

public class BillingManager implements PurchasesUpdatedListener {
    private final BillingClient mBillingClient;
    private final Activity mActivity;
    private static final String TAG = "BillingManager";

    public BillingManager(Activity  activity) {

        mActivity = activity;
        mBillingClient = BillingClient.newBuilder(mActivity).setListener(this).build();
        mBillingClient.startConnection(new BillingClientStateListener() {
            @Override
            public void onBillingSetupFinished(@BillingClient.BillingResponse int billingResponse) {
                if (billingResponse == BillingClient.BillingResponse.OK) {
                    Log.i(TAG, "onBillingSetupFinished() response: " + billingResponse);
                } else {
                    Log.w(TAG, "onBillingSetupFinished() error code: " + billingResponse);
                }
            }
            @Override
            public void onBillingServiceDisconnected() {
                Log.w(TAG, "onBillingServiceDisconnected()");
            }
        });
    }

    public void startPurchaseFlow(final String skuId, final String billingType) {
        // Specify a runnable to start when connection to Billing client is established
        Runnable executeOnConnectedService = new Runnable() {
            @Override
            public void run() {
                BillingFlowParams billingFlowParams = BillingFlowParams.newBuilder()
                        .setType(billingType)
                        .setSku(skuId)
                        .build();
                mBillingClient.launchBillingFlow(mActivity, billingFlowParams);
            }
        };

        // If Billing client was disconnected, we retry 1 time
        // and if success, execute the query
        startServiceConnectionIfNeeded(executeOnConnectedService);
    }

    @Override
    public void onPurchasesUpdated(@BillingClient.BillingResponse int responseCode,
                                   List<Purchase> purchases) {
        Log.d(TAG, "onPurchasesUpdated() response: " + responseCode);
    }

    private static final HashMap<String, List<String>> SKUS;
    static
    {
        SKUS = new HashMap<>();
        SKUS.put(BillingClient.SkuType.INAPP, Arrays.asList("gas", "premium"));
        SKUS.put(BillingClient.SkuType.SUBS, Arrays.asList("gold_monthly", "gold_yearly"));
    }

    public List<String> getSkus(@BillingClient.SkuType String type) {
        return SKUS.get(type);
    }

    public void querySkuDetailsAsync(@BillingClient.SkuType final String itemType,
                                     final List<String> skuList, final SkuDetailsResponseListener listener) {
        // Specify a runnable to start when connection to Billing client is established
        Runnable executeOnConnectedService = new Runnable() {
            @Override
            public void run() {
                SkuDetailsParams skuDetailsParams = SkuDetailsParams.newBuilder()
                        .setSkusList(skuList).setType(itemType).build();
                mBillingClient.querySkuDetailsAsync(skuDetailsParams,
                        new SkuDetailsResponseListener() {
                            @Override
                            public void onSkuDetailsResponse(int responseCode,
                                                             List<SkuDetails> skuDetailsList) {
                                listener.onSkuDetailsResponse(responseCode, skuDetailsList);
                            }
                        });
            }
        };

        // If Billing client was disconnected, we retry 1 time
        // and if success, execute the query
        startServiceConnectionIfNeeded(executeOnConnectedService);
    }

    private void startServiceConnectionIfNeeded(final Runnable executeOnSuccess) {
        if (mBillingClient.isReady()) {
            if (executeOnSuccess != null) {
                executeOnSuccess.run();
            }
        } else {
            mBillingClient.startConnection(new BillingClientStateListener() {
                @Override
                public void onBillingSetupFinished(@BillingClient.BillingResponse int billingResponse) {
                    if (billingResponse == BillingClient.BillingResponse.OK) {
                        Log.i(TAG, "onBillingSetupFinished() response: " + billingResponse);
                        if (executeOnSuccess != null) {
                            executeOnSuccess.run();
                        }
                    } else {
                        Log.w(TAG, "onBillingSetupFinished() error code: " + billingResponse);
                    }
                }
                @Override
                public void onBillingServiceDisconnected() {
                    Log.w(TAG, "onBillingServiceDisconnected()");
                }
            });
        }
    }

    public void destroy() {
        mBillingClient.endConnection();
    }
}
public class GamePlayActivity extends FragmentActivity implements BillingProvider {

@Override
    protected void onDestroy() {
        super.onDestroy();

// I want call method here
    }

}

现在我想在我的游戏活动中调用上述函数。我不知道怎么称呼它

如文件中所述

从GamePlayActivity.onDestroy调用它

但是你定义了自己的方法

覆盖GamePlayActivity的onDestroy方法,并放置mBillingClient.endConnection()进入它

@Override
protected void onDestroy() {
    mBillingClient.endConnection();
}

我假设您的活动已经有了BillingManager的实例

public class GamePlayActivity extends FragmentActivity implements BillingProvider {

    BillingManager bm;  // assign this in onCreate 

    @Override
    protected void onDestroy() {
        super.onDestroy();
        bm.destroy();
   }

}

新建BillingManager().destroy()
将是一个良好的开端。。。如果没有看到本课程的其他部分以及你如何与之互动,很难回答。请提供@cricket\u 007,可以使用铸造活动完成also@AmitVaghela我已经添加了完整的代码,请检查ittry链接((MainActivity)mContext.onDestroy();在您的活动中,如果没有,请通知done@PriyaThat不能是完整代码。你的活动没有onCreate方法,你也可以在其中调用另一个destroy方法onDestroy@Priya那真的没有必要。另外,它是一个方法调用,所以只需执行mBillingClient无法执行的错误resolved@Priya,您应该已经有了BillingManager的实例。执行bm.destroy()。否则,
new BillingManager().destroy()
将执行您的方法,但我想如果必须这样做,您的逻辑中会有一个巨大的错误。是否需要将bm.destroy()放在super.ondestory()行上方?需要首先调用super。请简要描述一下。Thanks@YasiruNayanajith您希望在自己的应用程序之前调用框架的destroy方法