2

我正在编写应用程序,在我的 MainActivity 中有项目列表。当单击项目时,新的 DetailsActivity 开始显示该项目的详细信息和购买它的按钮。此应用程序基于 Google 的地下城示例。

我想知道我应该如何管理与 BillingService 的连接?

选项 1)我是否应该像在地下城示例中一样在 MainActivity 中创建 BillingService,然后在请求购买时从每个 ProjectDetailsActivity 绑定到该服务?我不确定绑定到绑定到 IMarketBillingService 的 BillingService 是否不会变得太混乱......

我试图这样做,但我不确定如何从 MainActivity 以外的 Activity 绑定到 BillingService。我是按照您通常绑定到服务的方式完成的:

//ProjectDetailsActivity.java
private ServiceConnection billingConnection = new ServiceConnection() {

    @Override
    public void onServiceConnected(ComponentName name, IBinder service) {
        mBillingService = ((BillingService.MyBinder)service).getService();
        if(mBillingService!=null)
            Log.d(tag, "Bound to BillingService");
    }

    @Override
    public void onServiceDisconnected(ComponentName name) {
        mBillingService = null;
    }
};

public void unbind() {
    try {
        unbindService(billingConnection);
    } catch (IllegalArgumentException e) {
        // This might happen if the service was disconnected
    }
}

onCreate(){...}

onStart(){...
billingIntent = new Intent(ProjectDetailsActivity.this, BillingService.class);
bindService(billingIntent, billingConnection, Context.BIND_AUTO_CREATE);
...}

选项 2)我是否应该以某种方式将 BillingService 从 MainActivity 传递给 ProjectDetailsActivities?我是的,怎么样?用 Parcelable 什么的?我没有看到这样做的可能性,我认为这不是正确的方法。

选项 3)我应该在每个 ProjectDetailsActivity 中创建 BillingService 吗?如上所述,我认为这不行,因为所有这些服务在购买后都是多余的。

其他选择..?

我想听听如何解决这个问题?提前致谢。

4

1 回答 1

1

两种选择都没有。不要考虑“创建”或“传递”服务。您可以通过任何带有意图的活动与服务进行通信。

我为 Android In-app Billing 编写了一个开源来为你处理这个问题。源代码也可能有助于阐明有关服务的一些概念。

于 2012-09-02T00:21:15.810 回答