ActivityNotFoundException用于意图android.settings.NFC_PAYMENT_SETTINGS

时间:2017-05-24 09:38:26

标签: android nfc

我正在尝试打开NFC Tap& amp;使用这段代码付费页面:

startActivity(new Intent(Settings.ACTION_NFC_PAYMENT_SETTINGS));

在使用Android 7.1.2测试LG Nexus 5X时,我收到了这次崩溃:

android.content.ActivityNotFoundException:
 No Activity found to handle Intent { act=android.settings.NFC_PAYMENT_SETTINGS }
  at android.app.Instrumentation.checkStartActivityResult(Instrumentation.java:1809)
  at android.app.Instrumentation.execStartActivity(Instrumentation.java:1523)
  at android.app.Activity.startActivityForResult(Activity.java:4228)
  at android.support.v4.app.BaseFragmentActivityJB.startActivityForResult(SourceFile:50)
  at android.support.v4.app.FragmentActivity.startActivityForResult(SourceFile:79)
  at android.app.Activity.startActivityForResult(Activity.java:4186)
  at android.support.v4.app.FragmentActivity.startActivityForResult(SourceFile:859)
  at android.app.Activity.startActivity(Activity.java:4525)
  at android.app.Activity.startActivity(Activity.java:4493)
  at ...

好吧,这次崩溃可以通过try-catch轻松处理,但是什么是奇怪的,当我手动打开这个NFC设置时,代码就像一个魅力 - 没有崩溃。为什么?有没有人对这种行为有解释?

在文档[1]中写道:

  

在某些情况下,匹配的活动可能不存在,因此请确保您   防止这种情况发生。

他们是否有可能将这句话视为“您必须手动打开设置,然后才能正常工作”?

[1] https://developer.android.com/reference/android/provider/Settings.html#ACTION_NFC_PAYMENT_SETTINGS

1 个答案:

答案 0 :(得分:0)

来自:https://developer.android.com/reference/android/provider/Settings.html#ACTION_NFC_PAYMENT_SETTINGS

  

ACTION_NFC_PAYMENT_SETTINGS

     

在API级别19中添加

     

字符串ACTION_NFC_PAYMENT_SETTINGS

     

活动行动:      显示NFC Tap&付费设置

     

这会显示允许用户配置点击和付费设置的用户界面。

     

在某些情况下,匹配的活动可能不存在,因此请确保您不会受到此保护。

     

输入:没什么

     

输出:没什么

     

常量值:" android.settings.NFC_PAYMENT_SETTINGS"

您的设备不支持ACTION_NFC_PAYMENT_SETTINGS,或至少无法处理。

更新1

由于你的minAPILevel是19,因此android RT应支持该动作。但是,操作和NFC设置菜单之间的链接 ALTHOUGH 菜单存在,可能无法建立或无法建立。

尝试使用Settings.ACTION_NFC_SETTINGS作为操作并查看是否启动。 如果是这样,我预计会出现实施问题。

为了防止例外,我建议使用:

PackageManager packageManager = getActivity().getPackageManager();
if (intent.resolveActivity(packageManager) != null) {
    startActivity(<your intent>);
} else {
    Log.d(TAG, "No application available to handle requested action.");
}

请参阅:How to check if an intent can be handled from some activity?以获取信用和参考。