В настоящее время я пытаюсь добавить в свое приложение биллинг в приложении, чтобы пользователи могли делать небольшие пожертвования. Я использую последнюю версию 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
возвращает логическое значение, и я проверил возвращаемое значение, оно оказалось ложным. Так что я думаю, что это то, откуда исходит проблема.
Я видел, что некоторые люди говорят, что запись для службы должна быть добавлена в AndroidManifest.xml, например:
Пробовал это, но это не имело значения, а также эта запись не упоминается в официальном руководстве, поэтому я считаю, что она не нужна.
Любые идеи, что я делаю неправильно?