我目前正在尝试将应用内结算添加到我的应用中,以便用户可以进行小额捐款。我使用最新版本的 Android Studio 进行开发,并遵循本指南(一步一步,我正在做所有提到的事情......至少我认为我这样做:-)):https ://developer.android.com /google/play/billing/billing_integrate.html
AIDL 文件放置在上述位置(在src/main
com.android.vending.billing 包中),我看到它是在gen
文件夹下生成的。
当我测试产品检索时,我注意到该方法onServiceConnected
从未被调用,它在活动中实现如下:
IInAppBillingService mService;
ServiceConnection mServiceConn = new ServiceConnection() {
@Override
public void onServiceDisconnected(ComponentName name) {
mService = null;
}
@Override
public void onServiceConnected(ComponentName name,
IBinder service) {
mService = IInAppBillingService.Stub.asInterface(service);
}
};
与服务的绑定是这样的(在同一个活动中):
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_donation);
Intent serviceIntent =
new Intent("com.android.vending.billing.InAppBillingService.BIND");
serviceIntent.setPackage("com.android.vending");
bindService(serviceIntent, mServiceConn, Context.BIND_AUTO_CREATE);
}
我注意到两件事:
- 当我离开捐赠活动时,我在控制台中看到一个异常:
... has leaked ServiceConnection ... that was originally bound here
- 我看到有些人建议在应用程序上下文中替换使用 bindService 而不是活动,实际上如果我这样做,问题就消失了。但我认为这与我onServiceConnected
从未调用过的主要问题无关,而且为什么在官方指南中调用了该活动? bindService
返回一个布尔值,我检查了返回值,它是false。所以我想这就是问题的来源。
我看到有人说必须将服务的条目添加到 AndroidManifest.xml - 像这样:
试过这个,但没有任何区别,官方指南中也没有提到这个条目,所以我相信它是不需要的。
任何想法我做错了什么?