我想在我的应用中添加应用内购买,但我无法将我的活动绑定到应用内结算服务。
我已经完成了页面https://developer.android.com/training/in-app-billing/preparing-iab-app.html
中提到的所有步骤在物理设备中调试我发现问题出现在IabHelper类的下一个命令中:
mContext.bindService(serviceIntent, mServiceConn, Context.BIND_AUTO_CREATE);
我注意到它无法正常工作,因为程序不会停止在ServiceConnection实例的两个方法中的任何一个,也就是说,它不会停在onServiceConnected()或onServiceDisconnected()
我直接在我的Activity中使用相同的命令进行了测试,并且与应用内结算服务的绑定成功。
因此,如果从Activity请求绑定,则绑定正在工作,但是当从IabHelper类请求绑定时它不起作用。
我的问题是,如何将我的活动从IabHelper类绑定到结算服务?
以下是从IabHelper调用startSetup方法的代码:
mHelper = new IabHelper(this, publicKey);
mHelper.startSetup(new IabHelper.OnIabSetupFinishedListener()
{
@Override
public void onIabSetupFinished(IabResult result)
{
if(!result.isSuccess())
{
mHelper=null;
return;
}
if (mHelper == null) return;
}
});
这是IabHelper类中用于绑定服务的代码:
Intent serviceIntent = new Intent("com.android.vending.billing.InAppBillingService.BIND");
serviceIntent.setPackage("com.android.vending");
List<ResolveInfo> intentServices = mContext.getPackageManager().queryIntentServices(serviceIntent, 0);
if (intentServices != null && !intentServices.isEmpty())
{
// service available to handle that Intent
mContext.bindService(serviceIntent, mServiceConn, Context.BIND_AUTO_CREATE);
}
以下是我用来直接从活动绑定到服务的代码:
private 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);
}
};
Intent serviceIntent = new Intent("com.android.vending.billing.InAppBillingService.BIND");
serviceIntent.setPackage("com.android.vending");
this.bindService(serviceIntent, mServiceConn, Context.BIND_AUTO_CREATE);
提前感谢您的帮助
答案 0 :(得分:0)
我只是意识到自己的错误,我在startSetup完成之前调用了queryInventoryAsync方法。
这是我的错误:
mHelper.startSetup(new IabHelper.OnIabSetupFinishedListener()
{
@Override
public void onIabSetupFinished(IabResult result)
{
if(!result.isSuccess())
{
mHelper=null;
return;
}
}
});
try {mHlpr.queryInventoryAsync(true, itemList, mQueryListener);}
catch (IabHelper.IabAsyncInProgressException e) {e.printStackTrace();}
要更正,我将代码更改为:
mHelper.startSetup(new IabHelper.OnIabSetupFinishedListener()
{
@Override
public void onIabSetupFinished(IabResult result)
{
if(!result.isSuccess())
{
mHelper=null;
return;
}
else if(result.isSuccess())
{
try {mHlpr.queryInventoryAsync(true, itemList, mQueryListener);}
catch (IabHelper.IabAsyncInProgressException e) {e.printStackTrace();}
}
}
});
当我直接从活动中测试绑定时,我已经删除了查询命令,这就是它从活动中工作的原因;当我从IabHelper类测试时,我正在调用查询命令