ash*_*hes 53 android android-fragments android-activity android-billing
新的Android Billing v3文档和帮助程序代码startIntentSenderForResult()在启动购买流程时使用.我想从a开始购买流程(并收到结果)Fragment.
例如,文档建议调用
startIntentSenderForResult(pendingIntent.getIntentSender(),
1001, new Intent(), Integer.valueOf(0), Integer.valueOf(0),
Integer.valueOf(0));
Run Code Online (Sandbox Code Playgroud)
和帮助程序代码调用
mHelper.launchPurchaseFlow(this, SKU_GAS, 10001,
mPurchaseFinishedListener, "bGoa+V7g/yqDXvKRqq+JTFn4uQZbPiQJo4pf9RzJ");
Run Code Online (Sandbox Code Playgroud)
哪个叫startIntentSenderForResult().
问题是,在父节点上调用调用startIntentSenderForResult()原因而不是从调用它的位置(调用位置)调用原因.onActivityResult()ActivityFragmentIabHelper
我无法接受的onActivityResult()父Activity,然后手动调用onActivityResult()的Fragment,但有一种方法,使一个呼叫startIntentSenderForResult()从一个Fragment直接结果返回到Fragment的onActivityResult()?
LEO*_*LEO 36
我建议两种解决方案:
1.)将IabHelper mHelper放在活动上,并从片段中调用IabHelper.
就像是:
要使用此解决方案,请在活动中将IabHelper声明为public,并使用方法从Fragment中调用启动器.
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();
}
Run Code Online (Sandbox Code Playgroud)
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);
}
}
Run Code Online (Sandbox Code Playgroud)
小智 9
1)您应该修改resultCode(RC_REQUEST)以将片段索引放入其中.
int rc_reqest = RC_REQUEST + ((getActivity().getSupportFragmentManager().getFragments().indexOf(this)+1)<<16) ;
mHelper.launchPurchaseFlow(getActivity(), sku, rc_reqest ,mPurchaseFinishedListener, payload);
Run Code Online (Sandbox Code Playgroud)
2)在IabHelper.launchPurchaseFlow(...)中
change mRequestCode = requestCode
Run Code Online (Sandbox Code Playgroud)
至
mRequestCode = requestCode&0xffff;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
18668 次 |
| 最近记录: |