处理Android中的未知URI方案(比特币示例)

usr*_*ΛΩΝ 5 android android-intent bitcoin

我想在Android应用程序的PreferenceScreen中集成"通过比特币捐赠"按钮.

有一些适用于Android的比特币客户端,比特币维基定义了一个应该用于BTC支付的URI方案.

我试过以下代码

findPreference(getString(R.string.preference_donateBitcoin)).setOnPreferenceClickListener(new OnPreferenceClickListener() {

            @Override
            public boolean onPreferenceClick(Preference preference) {
                String url = getString(R.string.pref_donateBitcoin_uri);
                Intent i = new Intent(Intent.ACTION_VIEW);
                i.setData(Uri.parse(url));
                startActivity(i);
                return false;
            }
        });
Run Code Online (Sandbox Code Playgroud)

withou在手机上安装了BTC.我尝试使用以下URI启动intent:bitcoin:19iSEgNkJnEUtNDuuTkkZrU44PVKYMVfhz?amount=1期望Android告诉我没有安装处理程序.

相反,我得到了一个 ActivityNotFoundException

android.content.ActivityNotFoundException: No Activity found to handle Intent { act=android.intent.action.VIEW dat=bitcoin:19iSEgNkJnEUtNDuuTkkZrU44PVKYMVfhz?amount=1 }
Run Code Online (Sandbox Code Playgroud)

我的问题是正确处理(读取"最佳实践")设备未知的URI方案.

  • 如何检查某个URI方案是否至少可以由一个应用程序处理?(如果更多,我想一个选择屏幕)
  • 关于比特币,但没有提到任何特定的客户,通过比特币支付时,最好的意图应该是什么?没有安装BTC客户端时如何处理?

[编辑]:问题是错误的,因为我搞砸了我的手机备份,并假设比特币钱包应用程序安装时没有.

Com*_*are 4

如何检查某一 URI 方案是否至少可以由一个应用程序处理?(如果更多,我想是一个选择屏幕)

任何一个:

  • 只要抓住ActivityNotFoundException, 或

  • 使用PackageManagerand resolveActivity()orqueryIntentActivities()来查看是否有与您匹配的内容Intent

参考比特币但不参考特定客户,通过比特币支付时的最佳意图应该是什么?

你必须询问比特币应用程序的作者这个问题,或者鼓励他们采用一个Uri标准(如果他们还没有这样做的话)。

根据您列出的应用程序的清单,您Intent看起来应该可以工作。至少,使用AppXploreACTION_VIEW ,我看到了for值的活动,Uri其方案为bitcoin. 因此,您可能希望联系此应用程序的开发人员,看看是否可以准确确定集成中出现的问题。

没有安装BTC客户端怎么处理?

提议将用户带到 Play 商店,通过market: Uri.