我想在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客户端时如何处理?

  • [编辑]:这个问题是错误的,因为我弄乱了手机备份,并假定未安装时已安装了Bitcoin Wallet应用程序。

    最佳答案



    任何一个:

  • 只捕获ActivityNotFoundException
  • 使用PackageManagerresolveActivity()queryIntentActivities()查看是否有与您的Intent匹配的文件



  • 您将不得不问比特币应用程序的作者有问题,或者鼓励他们采用Uri标准(如果尚未这样做)。

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



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

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

    10-12 02:39