首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >分片调用startIntentSenderForResult (安卓计费v3)

分片调用startIntentSenderForResult (安卓计费v3)
EN

Stack Overflow用户
提问于 2013-01-03 08:00:38
回答 10查看 23.4K关注 0票数 55

新的安卓计费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(),将结果直接返回到该FragmentonActivityResult()

EN

回答 10

Stack Overflow用户

发布于 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);
    } 
}
票数 36
EN

Stack Overflow用户

发布于 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;
票数 9
EN

Stack Overflow用户

发布于 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和更低版本,我们仍然需要使用其他答案中描述的技巧。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14131171

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档