我正在编写应用程序,在我的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吗?如上所述,我认为没有问题,因为所有这些服务在购买后都是多余的。
其他选项..?
我想听听如何解决这个问题?提前谢谢。
答案 0 :(得分:1)
两种选择都没有。不要考虑“创建”或“传递”服务。您可以通过任何具有意图的活动与服务进行通信。
我为Android In-app Billing编写了一个开源library,为您处理此问题。源代码也可能有助于澄清有关服务的一些概念。