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

时间:2012-12-14 21:54:20

标签: android android-intent bitcoin

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

有一些适用于Android的比特币客户端,比特币维基定义了URI scheme,应该用于BTC付款。

我尝试过以下代码

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;
            }
        });

在手机上安装了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 }

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

  • 如何检查某个URI方案至少可以由一个应用程序处理? (如果更多,我猜一个选择屏幕)
  • 参考比特币,但没有参考任何特定的客户,应该最好的意图是通过比特币支付?没有安装BTC客户端的情况下如何处理?

[编辑]:这个问题是错误的,因为我弄乱了我的手机备份,并推测比特币钱包应用程序安装时没有。

1 个答案:

答案 0 :(得分:4)

  

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

要么:

  • 抓住ActivityNotFoundException

  • 使用PackageManagerresolveActivity()queryIntentActivities()查看是否有符合您Intent

  • 的内容
  

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

你必须要求比特币应用程序的作者提出质疑,或者鼓励他们采用Uri标准,如果他们还没有这样做的话。

根据您列出的应用程序的清单,您的Intent看起来应该有效。至少,使用AppXplore,我看到ACTION_VIEW的{​​{1}}值的活动,其Uri方案为bitcoin。因此,您可能希望联系此应用程序的开发人员,看看您是否可以准确确定集成的错误位置。

  

如果没有安装BTC客户端,如何处理?

提议通过market: Uri将用户带到Play商店以安装您喜欢的某个比特币客户端。