新的安卓计费v3文档和助手代码在启动购买流程时使用startIntentSenderForResult()
。我想从Fragment
开始一个购买流程(并接收结果)。
例如,documentation建议调用
startIntentSenderForResult(pendingIntent.getIntentSender(),
1001, new Intent(), Integer.valueOf(0), Integer.valueOf(0),
Integer.valueOf(0));
和helper code调用
mHelper.launchPurchaseFlow(this, SKU_GAS, 10001,
mPurchaseFinishedListener, "bGoa+V7g/yqDXvKRqq+JTFn4uQZbPiQJo4pf9RzJ");
它调用startIntentSenderForResult()
。
问题是,调用startIntentSenderForResult()
会导致在父Activity
上调用onActivityResult()
,而不是在从中调用它的Fragment
( IabHelper
所在的位置)上调用它。
我可以在父Activity
中接收onActivityResult()
,然后在Fragment
上手动调用onActivityResult()
,但是有没有办法从Fragment
调用startIntentSenderForResult()
,将结果直接返回到该Fragment
的onActivityResult()
发布于 2013-01-03 09:24:47
我建议两种解决方案:
1.)将IabHelper mHelper放在活动上,并从片段中调用IabHelper。
类似于:
要使用此解决方案,请在活动中将IabHelper声明为公共,并使用一个方法从片段中调用启动器。
public class MyActivity extends Activity{
public IabHelper mHelper
public purchaseLauncher(){
mHelper.launchPurchaseFlow(this, SKU_GAS, 10001,
mPurchaseFinishedListener, "bGoa+V7g/yqDXvKRqq+JTFn4uQZbPiQJo4pf9RzJ");
}
/*The finished, query and consume listeners should also be implemented in here*/
}
public class FragmentActivity extends Fragment{
MyActivity myAct = (MyActivity) getActivity();
myAct.purchaseLauncher();
}
2.)在onActivityResult中,调用包含IabHelper对象的相应片段。适当的片段可以具有对助手对象的访问方法。
protected void onActivityResult(int requestCode, int resultCode,Intent data)
{
super.onActivityResult(requestCode, resultCode, data);
FragmentManager fragmentManager = getSupportFragmentManager();
Fragment fragment = fragmentManager.findFragmentByTag("YourTag");
if (fragment != null)
{
((MyFragmentWithIabHelper)fragment).onActivityResult(requestCode, resultCode,data);
}
}
发布于 2014-03-16 17:10:55
1)修改您的resultCode (RC_REQUEST),将其放入分片索引。
int rc_reqest = RC_REQUEST + ((getActivity().getSupportFragmentManager().getFragments().indexOf(this)+1)<<16) ;
mHelper.launchPurchaseFlow(getActivity(), sku, rc_reqest ,mPurchaseFinishedListener, payload);
2)在IabHelper.launchPurchaseFlow中(...)
change mRequestCode = requestCode
至
mRequestCode = requestCode&0xffff;
发布于 2016-08-23 20:31:52
在SDK24及更高版本中,support Fragment中也提供了一个startIntentSenderForResult方法,它可以正常工作。请注意,还有一个额外的Bundle参数,它可以作为null传递。因此,最终的代码将是:
startIntentSenderForResult(pendingIntent.getIntentSender(),
1001, new Intent(), Integer.valueOf(0), Integer.valueOf(0),
Integer.valueOf(0), null);
当然,对于API 23和更低版本,我们仍然需要使用其他答案中描述的技巧。
https://stackoverflow.com/questions/14131171
复制相似问题