Replace Support Wallet Fragment on Fragment view 是 returns 错误的请求代码

Replace SupportWalletFragment on Fragment view id returns the wrong request code

我正在尝试实施 Android 在应用程序中付款。
Android 支付按钮必须位于从 MainActivity 替换的 Fragment 上。

WalletFragmentInitParams.Builder startParamsBuilder = WalletFragmentInitParams.newBuilder()
            .setMaskedWalletRequest(maskedWalletRequest)
            .setMaskedWalletRequestCode(REQUEST_CODE_MASKED_WALLET)
            .setAccountName(accountName);
    mWalletFragment.initialize(startParamsBuilder.build());

    MainActivity mainActivity = getMainActivity();
    mainActivity.getSupportFragmentManager().beginTransaction()
            .replace(R.id.conteiner_AP, mWalletFragment)
            .commit();

此 ID 容器(R.id.conteiner_AP)位于片段视图中

按照这些说明 (https://developers.google.com/android-pay/android/tutorial#obtain_credentials_and_a_client_id_for_your_app),我必须在 Activity 方法 onActivityResult 中获取掩码钱包 REQUEST_CODE_MASKED_WALLET,这是上面的指示。

但我通过奇怪的代码(328180 和 262644)获得了所需的数据,而不是我的 REQUEST_CODE_MASKED_WALLET

为什么会这样?有人可以帮助我吗?

我相信这是因为您需要在 Activity onActivityResult 方法中调用 super.onActivityResult(...)

看看你得到的数字以及它们在二进制中的样子:

328180 --> 1010000000111110100

262644 --> 1000000000111110100

基本上,当 SupportWalletFragment 需要显示 UI 时,它会触发内部请求代码为 500 的 Intent(注意:做 not 依赖这个数字在未来的版本中是相同的)。二进制的 500 是 111110100,这是您看到的数字的常见后缀。

支持库将 activity 结果定向到片段的方式是使用片段 ID 作为请求代码高位的掩码。这就是为什么您在看到的两个请求代码的开头看到 101100 的原因。然后,当您调用 super.onActivityResult() 时,支持库会提取片段 ID 并适当地定向结果。

如果添加这行代码,您应该会看到想要的结果。