Class AsyncHCEService

java.lang.Object
android.content.Context
android.content.ContextWrapper
android.app.Service
android.nfc.cardemulation.HostApduService
com.gemalto.mfs.mwsdk.payment.internal.apduservice.AbstractHCEServiceInternal
com.gemalto.mfs.mwsdk.payment.AsyncHCEService
All Implemented Interfaces:
android.content.ComponentCallbacks, android.content.ComponentCallbacks2, APDUProcessorSetupCallbacks

public abstract class AsyncHCEService extends com.gemalto.mfs.mwsdk.payment.internal.apduservice.AbstractHCEServiceInternal
Abstract class for the HCE service. This class must require to setup Listener in order to get notification for the payment. This is similar to AbstractHCEService. However, the APDU processing with be executed in background thread instead of the UI thread. When application is integrated with AsyncHCEService, the SDK suspends APDU processing when SDK requests for authentication through PaymentServiceListener.onAuthenticationRequired(PaymentService, CHVerificationMethod, long) (PaymentService, CHVerificationMethod, long)}. Some POS immediately issues the 2nd tap command APDUs while authentication is not yet provided and the mobile device is still in close proximity to the POS. A repeating 'beep' sound may be made by the POS before authentication is provided. In order to avoid the behavior, SDK suspends the APDU processing while it is requesting for authentication.
Since:
6.7.0
  • Nested Class Summary

    Nested classes/interfaces inherited from class android.content.Context

    android.content.Context.BindServiceFlags
  • Field Summary

    Fields inherited from class android.nfc.cardemulation.HostApduService

    DEACTIVATION_DESELECTED, DEACTIVATION_LINK_LOSS, SERVICE_INTERFACE, SERVICE_META_DATA

    Fields inherited from class android.app.Service

    START_CONTINUATION_MASK, START_FLAG_REDELIVERY, START_FLAG_RETRY, START_NOT_STICKY, START_REDELIVER_INTENT, START_STICKY, START_STICKY_COMPATIBILITY, STOP_FOREGROUND_DETACH, STOP_FOREGROUND_LEGACY, STOP_FOREGROUND_REMOVE

    Fields inherited from class android.content.Context

    ACCESSIBILITY_SERVICE, ACCOUNT_SERVICE, ACTIVITY_SERVICE, ALARM_SERVICE, APP_OPS_SERVICE, APP_SEARCH_SERVICE, APPWIDGET_SERVICE, AUDIO_SERVICE, BATTERY_SERVICE, BIND_ABOVE_CLIENT, BIND_ADJUST_WITH_ACTIVITY, BIND_ALLOW_ACTIVITY_STARTS, BIND_ALLOW_OOM_MANAGEMENT, BIND_AUTO_CREATE, BIND_DEBUG_UNBIND, BIND_EXTERNAL_SERVICE, BIND_EXTERNAL_SERVICE_LONG, BIND_IMPORTANT, BIND_INCLUDE_CAPABILITIES, BIND_NOT_FOREGROUND, BIND_NOT_PERCEPTIBLE, BIND_PACKAGE_ISOLATED_PROCESS, BIND_SHARED_ISOLATED_PROCESS, BIND_WAIVE_PRIORITY, BIOMETRIC_SERVICE, BLOB_STORE_SERVICE, BLUETOOTH_SERVICE, BUGREPORT_SERVICE, CAMERA_SERVICE, CAPTIONING_SERVICE, CARRIER_CONFIG_SERVICE, CLIPBOARD_SERVICE, COMPANION_DEVICE_SERVICE, CONNECTIVITY_DIAGNOSTICS_SERVICE, CONNECTIVITY_SERVICE, CONSUMER_IR_SERVICE, CONTACT_KEYS_SERVICE, CONTEXT_IGNORE_SECURITY, CONTEXT_INCLUDE_CODE, CONTEXT_RESTRICTED, CREDENTIAL_SERVICE, CROSS_PROFILE_APPS_SERVICE, DEVICE_ID_DEFAULT, DEVICE_ID_INVALID, DEVICE_LOCK_SERVICE, DEVICE_POLICY_SERVICE, DISPLAY_HASH_SERVICE, DISPLAY_SERVICE, DOMAIN_VERIFICATION_SERVICE, DOWNLOAD_SERVICE, DROPBOX_SERVICE, EUICC_SERVICE, FILE_INTEGRITY_SERVICE, FINGERPRINT_SERVICE, GAME_SERVICE, GRAMMATICAL_INFLECTION_SERVICE, HARDWARE_PROPERTIES_SERVICE, HEALTHCONNECT_SERVICE, INPUT_METHOD_SERVICE, INPUT_SERVICE, IPSEC_SERVICE, JOB_SCHEDULER_SERVICE, KEYGUARD_SERVICE, LAUNCHER_APPS_SERVICE, LAYOUT_INFLATER_SERVICE, LOCALE_SERVICE, LOCATION_SERVICE, MEDIA_COMMUNICATION_SERVICE, MEDIA_METRICS_SERVICE, MEDIA_PROJECTION_SERVICE, MEDIA_ROUTER_SERVICE, MEDIA_SESSION_SERVICE, MIDI_SERVICE, MODE_APPEND, MODE_ENABLE_WRITE_AHEAD_LOGGING, MODE_MULTI_PROCESS, MODE_NO_LOCALIZED_COLLATORS, MODE_PRIVATE, MODE_WORLD_READABLE, MODE_WORLD_WRITEABLE, NETWORK_STATS_SERVICE, NFC_SERVICE, NOTIFICATION_SERVICE, NSD_SERVICE, OVERLAY_SERVICE, PEOPLE_SERVICE, PERFORMANCE_HINT_SERVICE, PERSISTENT_DATA_BLOCK_SERVICE, POWER_SERVICE, PRINT_SERVICE, PROFILING_SERVICE, RECEIVER_EXPORTED, RECEIVER_NOT_EXPORTED, RECEIVER_VISIBLE_TO_INSTANT_APPS, RESTRICTIONS_SERVICE, ROLE_SERVICE, SEARCH_SERVICE, SECURITY_STATE_SERVICE, SENSOR_SERVICE, SHORTCUT_SERVICE, STATUS_BAR_SERVICE, STORAGE_SERVICE, STORAGE_STATS_SERVICE, SYSTEM_HEALTH_SERVICE, TELECOM_SERVICE, TELEPHONY_IMS_SERVICE, TELEPHONY_SERVICE, TELEPHONY_SUBSCRIPTION_SERVICE, TEXT_CLASSIFICATION_SERVICE, TEXT_SERVICES_MANAGER_SERVICE, TV_INPUT_SERVICE, TV_INTERACTIVE_APP_SERVICE, UI_MODE_SERVICE, USAGE_STATS_SERVICE, USB_SERVICE, USER_SERVICE, VIBRATOR_MANAGER_SERVICE, VIBRATOR_SERVICE, VIRTUAL_DEVICE_SERVICE, VPN_MANAGEMENT_SERVICE, WALLPAPER_SERVICE, WIFI_AWARE_SERVICE, WIFI_P2P_SERVICE, WIFI_RTT_RANGING_SERVICE, WIFI_SERVICE, WINDOW_SERVICE

    Fields inherited from interface android.content.ComponentCallbacks2

    TRIM_MEMORY_BACKGROUND, TRIM_MEMORY_COMPLETE, TRIM_MEMORY_MODERATE, TRIM_MEMORY_RUNNING_CRITICAL, TRIM_MEMORY_RUNNING_LOW, TRIM_MEMORY_RUNNING_MODERATE, TRIM_MEMORY_UI_HIDDEN
  • Constructor Summary

    Constructors
    Constructor
    Description
    Default Constructor
  • Method Summary

    Modifier and Type
    Method
    Description
    boolean
    onApduResponse(byte[] inputApdu, android.os.Bundle extras, byte[] responseApdu)
    This method works together with processCommandApdu(byte[], Bundle) and call when response APDU has been computed by the SDK.
    byte[]
    processCommandApdu(byte[] apdu, android.os.Bundle extras)
    This function will process APDU in an separate thread.

    Methods inherited from class com.gemalto.mfs.mwsdk.payment.internal.apduservice.AbstractHCEServiceInternal

    onDeactivated, processCommandApduAsyncInternal

    Methods inherited from class android.nfc.cardemulation.HostApduService

    notifyUnhandled, onBind, processPollingFrames, sendResponseApdu

    Methods inherited from class android.app.Service

    attachBaseContext, dump, getApplication, getForegroundServiceType, onConfigurationChanged, onCreate, onDestroy, onLowMemory, onRebind, onStart, onStartCommand, onTaskRemoved, onTimeout, onTimeout, onTrimMemory, onUnbind, startForeground, startForeground, stopForeground, stopForeground, stopSelf, stopSelf, stopSelfResult

    Methods inherited from class android.content.ContextWrapper

    bindIsolatedService, bindService, bindService, bindService, bindService, bindServiceAsUser, bindServiceAsUser, checkCallingOrSelfPermission, checkCallingOrSelfUriPermission, checkCallingOrSelfUriPermissions, checkCallingPermission, checkCallingUriPermission, checkCallingUriPermissions, checkContentUriPermissionFull, checkPermission, checkSelfPermission, checkUriPermission, checkUriPermission, checkUriPermissions, clearWallpaper, createAttributionContext, createConfigurationContext, createContext, createContextForSplit, createDeviceContext, createDeviceProtectedStorageContext, createDisplayContext, createPackageContext, createWindowContext, createWindowContext, databaseList, deleteDatabase, deleteFile, deleteSharedPreferences, enforceCallingOrSelfPermission, enforceCallingOrSelfUriPermission, enforceCallingPermission, enforceCallingUriPermission, enforcePermission, enforceUriPermission, enforceUriPermission, fileList, getApplicationContext, getApplicationInfo, getAssets, getAttributionSource, getAttributionTag, getBaseContext, getCacheDir, getClassLoader, getCodeCacheDir, getContentResolver, getDatabasePath, getDataDir, getDeviceId, getDir, getDisplay, getExternalCacheDir, getExternalCacheDirs, getExternalFilesDir, getExternalFilesDirs, getExternalMediaDirs, getFilesDir, getFileStreamPath, getMainExecutor, getMainLooper, getNoBackupFilesDir, getObbDir, getObbDirs, getOpPackageName, getPackageCodePath, getPackageManager, getPackageName, getPackageResourcePath, getParams, getResources, getSharedPreferences, getSystemService, getSystemServiceName, getTheme, getWallpaper, getWallpaperDesiredMinimumHeight, getWallpaperDesiredMinimumWidth, grantUriPermission, isDeviceProtectedStorage, isRestricted, isUiContext, moveDatabaseFrom, moveSharedPreferencesFrom, openFileInput, openFileOutput, openOrCreateDatabase, openOrCreateDatabase, peekWallpaper, registerComponentCallbacks, registerDeviceIdChangeListener, registerReceiver, registerReceiver, registerReceiver, registerReceiver, removeStickyBroadcast, removeStickyBroadcastAsUser, revokeSelfPermissionsOnKill, revokeUriPermission, revokeUriPermission, sendBroadcast, sendBroadcast, sendBroadcast, sendBroadcastAsUser, sendBroadcastAsUser, sendOrderedBroadcast, sendOrderedBroadcast, sendOrderedBroadcast, sendOrderedBroadcast, sendOrderedBroadcast, sendOrderedBroadcast, sendOrderedBroadcastAsUser, sendStickyBroadcast, sendStickyBroadcast, sendStickyBroadcastAsUser, sendStickyOrderedBroadcast, sendStickyOrderedBroadcastAsUser, setTheme, setWallpaper, setWallpaper, startActivities, startActivities, startActivity, startActivity, startForegroundService, startInstrumentation, startIntentSender, startIntentSender, startService, stopService, unbindService, unregisterComponentCallbacks, unregisterDeviceIdChangeListener, unregisterReceiver, updateServiceGroup

    Methods inherited from class android.content.Context

    bindIsolatedService, getColor, getColorStateList, getDrawable, getString, getString, getSystemService, getText, obtainStyledAttributes, obtainStyledAttributes, obtainStyledAttributes, obtainStyledAttributes, revokeSelfPermissionOnKill, sendBroadcastWithMultiplePermissions

    Methods inherited from class java.lang.Object

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait

    Methods inherited from interface com.gemalto.mfs.mwsdk.payment.APDUProcessorSetupCallbacks

    setupCardActivation, setupListener, setupPluginRegistration
  • Constructor Details

    • AsyncHCEService

      public AsyncHCEService()
      Default Constructor
  • Method Details

    • processCommandApdu

      public byte[] processCommandApdu(byte[] apdu, android.os.Bundle extras)
      This function will process APDU in an separate thread. It returns immediately the 'NULL' byte array. Integrator shall return NULL to the HostApduService.processCommandApdu(byte[], Bundle) method. When response APDU is computed, SDK will sent it automatically through HostApduService.sendResponseApdu(byte[]) method. Response APDU is not directly returned in this function. MPA could override onApduResponse(byte[], Bundle, byte[]) method to obtain the response APDU.
      Overrides:
      processCommandApdu in class com.gemalto.mfs.mwsdk.payment.internal.apduservice.AbstractHCEServiceInternal
      Parameters:
      apdu - input APDU received from HostApduService
      extras - extra data that can be send together with the input APDU
      Returns:
      byte[] always null
      Since:
      6.7.0
    • onApduResponse

      public boolean onApduResponse(byte[] inputApdu, android.os.Bundle extras, byte[] responseApdu)
      This method works together with processCommandApdu(byte[], Bundle) and call when response APDU has been computed by the SDK.

      MPA could override this function to obtain the response APDU. The return 'boolean' informs the SDK if MPA intend to send back the response APDU to the Terminal.

      • When MPA returns 'false' in the overridden function, SDK sends response APDU to HostApduService after this function.
      • MPA could also send response APDU through HostApduService.sendResponseApdu(byte[]) method. If this case, MPA must return 'true' so that SDK will not send response APDU again. This provides the possibility for the MPA to override the response APDU.

      Overrides:
      onApduResponse in class com.gemalto.mfs.mwsdk.payment.internal.apduservice.AbstractHCEServiceInternal
      Parameters:
      inputApdu - original input APDU for the processing
      extras - original bundle passed for the processing
      responseApdu - response APDU computed by the SDK
      Returns:
      the default return value is false.
      Since:
      6.7.0