当前位置: 首页 > 知识库问答 >
问题:

从片段调用starIntentSenderForResult(Android计费v3)

万勇
2023-03-14

新的Android Billing v3文档和帮助程序代码在启动购买流时使用startinentsenderforresult()。我想从片段开始一个购买流程(并接收结果)。

例如,文件建议致电

startIntentSenderForResult(pendingIntent.getIntentSender(),
    1001, new Intent(), Integer.valueOf(0), Integer.valueOf(0),
    Integer.valueOf(0));

助手代码调用

mHelper.launchPurchaseFlow(this, SKU_GAS, 10001,   
    mPurchaseFinishedListener, "bGoa+V7g/yqDXvKRqq+JTFn4uQZbPiQJo4pf9RzJ");

它调用starIntentSenderForResult()

问题是,调用starIntentSenderForResult()会导致onActivityResult()在父活动上被调用,而不是在调用它的片段上(IabHelper驻留的地方)。

我可以在父级活动中接收onActivityResult(),然后手动调用片段上的onActivityResult(),但是,有没有一种方法可以从片段调用startinentsenderforresult(),直接将结果返回到片段的onActivityResult()


共有3个答案

邹嘉石
2023-03-14

在SDK 24和更高版本中,在support Fragment中也有一个startIntentSenderForResult方法,它可以按预期工作。请注意,还有一个额外的Bundle参数,可以作为null传递。因此,最终代码将是:

startIntentSenderForResult(pendingIntent.getIntentSender(),
    1001, new Intent(), Integer.valueOf(0), Integer.valueOf(0),
    Integer.valueOf(0), null);

当然,对于API 23及以下版本,我们仍然需要使用其他答案中描述的技巧。

苏宏峻
2023-03-14

1)您应该修改结果代码(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;
齐威
2023-03-14

我建议两种解决方案:

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对象的适当片段。适当的片段可以有一个访问helper对象的方法。

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);
    } 
}
 类似资料:
  • 我正在使用带有片段的FragmentPagerAdapter。我的问题是,当我调用setCurrentItem时,正在加载的片段的OnCreateView方法被调用两次。但是,需要注意的是,片断不是重新创建的,而是简单地恢复的。我非常想找到一个解决方案,使OnCreateView只能被调用一次。 两次调用Android oncreateview OnCreateView多次调用/使用ActionB

  • fragment类主活动/主活动如何限制我的主活动在从片段的最后一页返回到主活动时不返回到片段的最后一页,就像我有一个主活动,单击按钮该主活动会导致另外3个活动,其中一个活动有片段。片段的最后一页指向home activity,但当我在home activity上后退时,它再次将我引导到片段的最后一页,然后我再次按下back按钮,然后我的应用程序关闭

  • 嗨,我在主片段内使用带有碎片网的viewPager。我试图从画廊或相机中获取图像到位图,但在选择照片并启动ActivityForResult后,它不会在onActivityResult中捕获... 以下是我如何调用startActivityForResult: 这是我的onActivityResult: 有什么想法吗?

  • 如何限制我的主要活动不返回片段的最后一页,一旦从片段的最后一页返回到主要活动,就像我有一个主活动一样,单击按钮,该主活动会导致另外3个活动,其中一个活动有片段。片段的最后一页指向home activity,但当我在home activity上后退时,它再次将我引导到片段的最后一页,然后我再次按下back按钮,然后我的应用程序关闭 我的主要活动课 公共类主页扩展应用程序活动{ } 我零星的寻呼机 公

  • 已经看过这个链接: onIabPurchaseFinish从未打过电话。 和......我看了下面的链接,这就是我面临的确切问题: IabHelper PurchaseFinishedListener 在上面第二个链接中的一个答案中由kevinl表示的问题-是我遇到的问题,即 我在我的活动中编码了'onActivityResult' 控件确实进入了这个方法-但是-它没有进入-onIabPurcha