Android HCE開發配置AID響應關係總結

來源:互聯網
上載者:User

標籤:hostapduservice   android   nfc   hce   aid   

開發HCE功能必須使用到HostApduService,在使用HostApduService時需要配置HostApduService的對應AID,同一個手機可能安裝多個HCE APP,或者同一個APP包含多個HostApduService,這時候就需要搞清楚配置的AID和對應的HostApduService之間的響應向後問題。

首先介紹一下關於HostApduService的AID配置問題,AID有兩種模式:other和payment

第一種

<host-apdu-service xmlns:android="http://schemas.android.com/apk/res/android"    android:apduServiceBanner="@drawable/icon"    android:description="@string/servicedesc"    android:requireDeviceUnlock="false" >    <!--          可以通過指定多個aid-filter,來註冊多個AID。          category可以指定為 other 或者 payment。          requireDeviceUnlock為false的時候,可以在鎖屏狀態下完成處理,為true的時候,則會要求使用者解鎖螢幕。    -->    <aid-group        android:category="other"        android:description="@string/app_name" >        <aid-filter android:name="@string/AID1" />    </aid-group></host-apdu-service>
第二種

<host-apdu-service xmlns:android="http://schemas.android.com/apk/res/android"    android:apduServiceBanner="@drawable/alipay"    android:description="@string/servicedesc"    android:requireDeviceUnlock="false" >    <!--          可以通過指定多個aid-filter,來註冊多個AID。          category可以指定為 other 或者 payment。          requireDeviceUnlock為false的時候,可以在鎖屏狀態下完成處理,為true的時候,則會要求使用者解鎖螢幕    -->    <aid-group        android:category="payment"        android:description="@string/app_name" >        <aid-filter android:name="@string/AID2" />     </aid-group></host-apdu-service>


下面我們來詳細說明一下關於不同模式下的AID響應問題(前提:一個手機,手機上有A、B兩個HCE APP,通過讀卡機向手機發送APDU選擇指令)

1、A和B的應用AID設定的都是payment模式,

      只有手機當前選定的預設支付APP會響應,另外一個APP的AID選擇指令是不會響應的。

2、A和B的應用AID設定的都是other模式,

      當A和B的AID是相同的時候系統會彈出對話方塊,列出A和B,讓使用者選擇。

      如果A和B的AID不同,那麼兩個APP之間沒有相互影響。

3、A和B的應用AID設定的分別是payment(A)和other(B)模式,

      如果A和B的AID相同,那麼只有A會響應選擇指令。

      如果A和B的AID不同,那麼兩者之間不會相互影響


最後將如何判斷當前HCE應用是否是預設支付程式以及如何設定成預設支付程式的方法貢獻給大家

private void checkIsDefaultApp() {CardEmulation cardEmulationManager = CardEmulation.getInstance(NfcAdapter.getDefaultAdapter(this));ComponentName paymentServiceComponent = new ComponentName(getApplicationContext(), CardMangerService.class.getCanonicalName());if (!cardEmulationManager.isDefaultServiceForCategory(paymentServiceComponent, CardEmulation.CATEGORY_PAYMENT)) {Intent intent = new Intent(CardEmulation.ACTION_CHANGE_DEFAULT);intent.putExtra(CardEmulation.EXTRA_CATEGORY,CardEmulation.CATEGORY_PAYMENT);intent.putExtra(CardEmulation.EXTRA_SERVICE_COMPONENT,paymentServiceComponent);startActivityForResult(intent, 0);L.d("TAG","當前應用不是預設支付,需手動設定");} else {L.d("TAG","當前應用是系統預設支付程式");}}




Android HCE開發配置AID響應關係總結

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.