未设置为默认时使用我的应用程序进行 NFC 支付
Use my application for NFC payment when not set as default
您好,我正在处理 android NFC 支付申请。
Android 设置中有一个选项可以使用打开的应用程序而不是默认应用程序。例如,当我将默认应用程序设置为 Android Pay 并且我在付款前打开我的应用程序时 - 我想使用我的应用程序而不是默认应用程序进行付款。见下图。
我测试了它,但不幸的是我用 Android 支付而不是我在前台 运行 的应用程序支付。
我没有在文档中找到任何文字,如果我必须添加一些东西来清单,注册一些东西等等。?
我的清单中有 service
,intent filter
和 meta data
,当应用程序设置为默认付款时,它工作正常:
<service
android:name="com.example.MyWalletHceService"
android:exported="true"
android:permission="android.permission.BIND_NFC_SERVICE">
<intent-filter>
<action android:name="android.nfc.cardemulation.action.HOST_APDU_SERVICE"/>
</intent-filter>
<meta-data
android:name="android.nfc.cardemulation.host_apdu_service"
android:resource="@xml/apduservice"/>
</service>
正在添加 apduservice xml 内容:
<host-apdu-service xmlns:android="http://schemas.android.com/apk/res/android"
android:apduServiceBanner="@drawable/ic_logo_nfc_system"
android:description="@string/nfc_service_title"
android:requireDeviceUnlock="false">
<aid-group
android:category="payment"
android:description="@string/nfc_aid_desc">
<!-- Following is a PPSE AID. You must always include this AID in order for payments to
work-->
<aid-filter android:name="@string/aid_number"/>
<!-- Following AID list is specific to the application requirements.
If your application supports the type of card that these AID represents,
you must include those AID in your configuration file -->
<aid-filter android:name="@string/aid_mc_filter"/> <!-- Mastercard DEBIT/CREDIT -->
</aid-group>
所以我终于找到了解决办法!
一旦 activity 不在前台,您必须使用 setPreferredService(Activity, ComponentName) in your current foreground activity. It is recommended to to call it inside onResume()
and also do not forget to call unsetPreferredService(Activity)(onPause()
是调用它的好地方)。
还有一件事:
setPreferredService(Activity, ComponentName) and unsetPreferredService(Activity) 是在 API 21 中添加的,所以一定不要从旧的 API 调用它们。
您好,我正在处理 android NFC 支付申请。
Android 设置中有一个选项可以使用打开的应用程序而不是默认应用程序。例如,当我将默认应用程序设置为 Android Pay 并且我在付款前打开我的应用程序时 - 我想使用我的应用程序而不是默认应用程序进行付款。见下图。
我测试了它,但不幸的是我用 Android 支付而不是我在前台 运行 的应用程序支付。
我没有在文档中找到任何文字,如果我必须添加一些东西来清单,注册一些东西等等。?
我的清单中有 service
,intent filter
和 meta data
,当应用程序设置为默认付款时,它工作正常:
<service
android:name="com.example.MyWalletHceService"
android:exported="true"
android:permission="android.permission.BIND_NFC_SERVICE">
<intent-filter>
<action android:name="android.nfc.cardemulation.action.HOST_APDU_SERVICE"/>
</intent-filter>
<meta-data
android:name="android.nfc.cardemulation.host_apdu_service"
android:resource="@xml/apduservice"/>
</service>
正在添加 apduservice xml 内容:
<host-apdu-service xmlns:android="http://schemas.android.com/apk/res/android"
android:apduServiceBanner="@drawable/ic_logo_nfc_system"
android:description="@string/nfc_service_title"
android:requireDeviceUnlock="false">
<aid-group
android:category="payment"
android:description="@string/nfc_aid_desc">
<!-- Following is a PPSE AID. You must always include this AID in order for payments to
work-->
<aid-filter android:name="@string/aid_number"/>
<!-- Following AID list is specific to the application requirements.
If your application supports the type of card that these AID represents,
you must include those AID in your configuration file -->
<aid-filter android:name="@string/aid_mc_filter"/> <!-- Mastercard DEBIT/CREDIT -->
</aid-group>
所以我终于找到了解决办法!
一旦 activity 不在前台,您必须使用 setPreferredService(Activity, ComponentName) in your current foreground activity. It is recommended to to call it inside onResume()
and also do not forget to call unsetPreferredService(Activity)(onPause()
是调用它的好地方)。
还有一件事: setPreferredService(Activity, ComponentName) and unsetPreferredService(Activity) 是在 API 21 中添加的,所以一定不要从旧的 API 调用它们。