未设置为默认值时,请将我的应用程序用于NFC支付

时间:2018-01-24 11:31:26

标签: android nfc android-pay

您好我正在开发用于NFC支付的Android应用程序。

Android设置中有一个选项可以使用打开的应用程序而不是默认应用程序。例如,当我将默认应用程序设置为Android Pay并且在付款之前打开我的应用程序时 - 我想使用我的应用程序进行付款而不是默认应用程序。见图像波纹管。

enter image description here

我对它进行了测试,但遗憾的是我使用的是Android Pay,而不是我在前台运行的应用。

我没有在文档中找到任何单词,如果我必须添加一些东西来清单,注册一些东西等。?

我的清单中有service intent filtermeta 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>

1 个答案:

答案 0 :(得分:7)

所以我终于找到了解决方案!

您必须在当前的前台活动中使用setPreferredService(Activity, ComponentName)。建议在std::string cmd = "obabel -:\"ccco\" -O /home/user/output.png"; system(cmd.c_str()); 内拨打电话,并且一旦活动不在前台(onResume()是调用它的好地方),也不要忘记致电unsetPreferredService(Activity)

还有一件事: API 21中添加了setPreferredService(Activity, ComponentName)unsetPreferredService(Activity),因此请务必不要使用较旧的API调用它们。