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

标签 android android-intent bitcoin

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

Android 上有一些比特币客户端在运行,比特币 wiki 定义了一个 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 方案是否至少可以由一个应用程序处理? (如果更多,我想是一个选择屏幕)
  • 引用比特币但不引用任何特定客户,通过比特币支付时应该的最佳 Intent 是什么?没有安装BTC客户端怎么办?

[编辑]:这个问题是错误的,因为我搞砸了我的手机备份,并假定比特币钱包应用程序已安装,但实际上并未安装。

最佳答案

How do I check that a certain URI scheme can be handled at least by one application? (if more, I suppose a choice screen)

或者:

  • 只捕获 ActivityNotFoundException,或者

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

With reference to Bitcoin but without reference to that specific client, what should the best Intent be when paying via Bitcoin?

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

根据您列出的应用程序的 list ,您的 Intent 看起来应该可以工作。至少,使用 AppXplore ,我看到一个针对 ACTION_VIEW 的 Activity ,用于 Uri 值和 bitcoin 方案。因此,您可能希望联系此应用的开发者,看看您是否可以准确确定您的集成哪里出了问题。

How to handle the case when no BTC client is installed?

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

关于android - 在 Android 中处理未知的 URI 方案(比特币示例),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13886804/

相关文章:

android - 如何使用安卓ViewSwitcher?

android - 添加另存为图像以实现共享 Intent

android - 从我的 Android 应用程序以编程方式打开选定的文件(图像、pdf、...)?

transactions - 智能合约和交易有什么区别?

memory-leaks - bitcoind 0.8.4发生大量内存泄漏,导致守护程序崩溃

android - 将图像添加到 android 中关于触摸位置的触摸布局

Android:在 XML 中覆盖自己的 XML View

blockchain - HD钱包(bip32)地址推导路径

java - 在 ListView 的特定位置显示图像

android - 没有 "Apps using Usage Data"或 android.settings.USAGE_ACCESS_SETTINGS Intent 的设备