如何在具有多个购买活动的应用程序中绑定到计费服务

时间:2012-08-23 13:48:33

标签: android binding android-activity android-service in-app-billing

我正在编写应用程序,在我的MainActivity中我有项目列表。单击项目时,将启动DetailsActivity,显示此项目的详细信息,按钮以购买它。此应用程序基于Google的Dungeons示例。

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

选项1)我应该像在Dungeons示例中一样在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吗?如上所述,我认为没有问题,因为所有这些服务在购买后都是多余的。

其他选项..?

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

1 个答案:

答案 0 :(得分:1)

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

我为Android In-app Billing编写了一个开源library,为您处理此问题。源代码也可能有助于澄清有关服务的一些概念。