public abstract class HostNfcFService extends Service
HostNfcFService is a convenience Service
class that can be
extended to emulate an NFC-F card inside an Android service component.
Cards emulated by this class are based on the NFC-Forum NFC-F protocol (based on the JIS-X 6319-4 specification.)
A HostNfcFService service
can register
exactly one System Code and one NFCID2. For details about the use of
System Code and NFCID2, see the NFC Forum Digital specification.
To statically register a System Code and NFCID2 with the service, a SERVICE_META_DATA
entry must be included in the declaration of the service.
All HostNfcFService
declarations in the manifest must require the
android.Manifest.permission#BIND_NFC_SERVICE
permission
in their <service> tag, to ensure that only the platform can bind to your service.
An example of a HostNfcFService manifest declaration is shown below:
<service android:name=".MyHostNfcFService" android:exported="true" android:permission="android.permission.BIND_NFC_SERVICE"> <intent-filter> <action android:name="android.nfc.cardemulation.action.HOST_NFCF_SERVICE"/> </intent-filter> <meta-data android:name="android.nfc.cardemulation.host_nfcf_service" android:resource="@xml/nfcfservice"/> </service>This meta-data tag points to an nfcfservice.xml file. An example of this file with a System Code and NFCID2 declaration is shown below:
<host-nfcf-service xmlns:android="http://schemas.android.com/apk/res/android" android:description="@string/servicedesc"> <system-code-filter android:name="4000"/> <nfcid2-filter android:name="02FE000000000000"/> </host-nfcf-service>
The <host-nfcf-service>
is required
to contain a
<android:description>
attribute that contains a user-friendly description of the service that may be shown in UI.
The <host-nfcf-service>
must
contain:
<system-code-filter>
tag.<nfcid2-filter>
tag.Alternatively, the System Code and NFCID2 can be dynamically registererd for a service
by using the NfcFCardEmulation.registerSystemCodeForService(ComponentName, String)
and
NfcFCardEmulation.setNfcid2ForService(ComponentName, String)
methods.
When a remote NFC devices wants to communicate with your service, it
sends a SENSF_REQ command to the NFC controller, requesting a System Code.
If a NfcFCardEmulation service
has registered
this system code and has been enabled by the foreground application, the
NFC controller will respond with the NFCID2 that is registered for this service.
The reader can then continue data exchange with this service by using the NFCID2.
After service selection, all frames addressed to the NFCID2 of this service will
be sent through processNfcFPacket(byte[], Bundle)
, until the NFC link is
broken.
When the NFC link is broken, onDeactivated(int)
will be called.
Service.StartArgFlags, Service.StartResult, Service.StopForegroundFlags
Context.BindServiceFlags, Context.CreatePackageOptions, Context.ServiceName
Modifier and Type | Field and Description |
---|---|
static int |
DEACTIVATION_LINK_LOSS
Reason for
onDeactivated(int) . |
static String |
KEY_DATA |
static String |
KEY_MESSENGER |
static int |
MSG_COMMAND_PACKET
MSG_COMMAND_PACKET is sent by NfcService when
a NFC-F command packet has been received.
|
static int |
MSG_DEACTIVATED
MSG_DEACTIVATED is sent by NfcService when
the current session is finished; because
the NFC link was deactivated.
|
static int |
MSG_RESPONSE_PACKET
MSG_RESPONSE_PACKET is sent to NfcService to send
a response packet back to the remote device.
|
static String |
SERVICE_INTERFACE
The
Intent action that must be declared as handled by the service. |
static String |
SERVICE_META_DATA
The name of the meta-data element that contains
more information about this service.
|
START_CONTINUATION_MASK, START_FLAG_REDELIVERY, START_FLAG_RETRY, START_NOT_STICKY, START_REDELIVER_INTENT, START_STICKY, START_STICKY_COMPATIBILITY, START_TASK_REMOVED_COMPLETE, STOP_FOREGROUND_DETACH, STOP_FOREGROUND_REMOVE
ACCESSIBILITY_SERVICE, ACCOUNT_SERVICE, ACTIVITY_SERVICE, ALARM_SERVICE, APP_OPS_SERVICE, APPWIDGET_SERVICE, AUDIO_SERVICE, BACKUP_SERVICE, BATTERY_SERVICE, BIND_ABOVE_CLIENT, BIND_ADJUST_WITH_ACTIVITY, BIND_ALLOW_OOM_MANAGEMENT, BIND_ALLOW_WHITELIST_MANAGEMENT, BIND_AUTO_CREATE, BIND_DEBUG_UNBIND, BIND_EXTERNAL_SERVICE, BIND_FOREGROUND_SERVICE, BIND_FOREGROUND_SERVICE_WHILE_AWAKE, BIND_IMPORTANT, BIND_NOT_FOREGROUND, BIND_NOT_VISIBLE, BIND_SHOWING_UI, BIND_TREAT_LIKE_ACTIVITY, BIND_VISIBLE, BIND_WAIVE_PRIORITY, BLUETOOTH_SERVICE, CAMERA_SERVICE, CAPTIONING_SERVICE, CARRIER_CONFIG_SERVICE, CLIPBOARD_SERVICE, CONNECTIVITY_SERVICE, CONSUMER_IR_SERVICE, CONTEXT_CREDENTIAL_PROTECTED_STORAGE, CONTEXT_DEVICE_PROTECTED_STORAGE, CONTEXT_IGNORE_SECURITY, CONTEXT_INCLUDE_CODE, CONTEXT_REGISTER_PACKAGE, CONTEXT_RESTRICTED, CONTEXTHUB_SERVICE, COUNTRY_DETECTOR, DEVICE_IDLE_CONTROLLER, DEVICE_POLICY_SERVICE, DISPLAY_SERVICE, DOWNLOAD_SERVICE, DROPBOX_SERVICE, ETHERNET_SERVICE, FINGERPRINT_SERVICE, GATEKEEPER_SERVICE, HARDWARE_PROPERTIES_SERVICE, HDMI_CONTROL_SERVICE, INPUT_METHOD_SERVICE, INPUT_SERVICE, JOB_SCHEDULER_SERVICE, KEYGUARD_SERVICE, LAUNCHER_APPS_SERVICE, LAYOUT_INFLATER_SERVICE, LOCATION_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_POLICY_SERVICE, NETWORK_SCORE_SERVICE, NETWORK_STATS_SERVICE, NETWORKMANAGEMENT_SERVICE, NFC_SERVICE, NOTIFICATION_SERVICE, NSD_SERVICE, PERSISTENT_DATA_BLOCK_SERVICE, POWER_SERVICE, PRINT_SERVICE, RADIO_SERVICE, RECOVERY_SERVICE, RESTRICTIONS_SERVICE, SEARCH_SERVICE, SENSOR_SERVICE, SERIAL_SERVICE, SHORTCUT_SERVICE, SIP_SERVICE, SOUND_TRIGGER_SERVICE, STATUS_BAR_SERVICE, STORAGE_SERVICE, SYSTEM_HEALTH_SERVICE, TELECOM_SERVICE, TELEPHONY_SERVICE, TELEPHONY_SUBSCRIPTION_SERVICE, TEXT_SERVICES_MANAGER_SERVICE, TRUST_SERVICE, TV_INPUT_SERVICE, UI_MODE_SERVICE, UPDATE_LOCK_SERVICE, USAGE_STATS_SERVICE, USB_SERVICE, USER_SERVICE, VIBRATOR_SERVICE, VOICE_INTERACTION_MANAGER_SERVICE, WALLPAPER_SERVICE, WIFI_NAN_SERVICE, WIFI_P2P_SERVICE, WIFI_RTT_SERVICE, WIFI_SCANNING_SERVICE, WIFI_SERVICE, WINDOW_SERVICE
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 and Description |
---|
HostNfcFService() |
Modifier and Type | Method and Description |
---|---|
IBinder |
onBind(Intent intent)
Return the communication channel to the service.
|
abstract void |
onDeactivated(int reason)
This method will be called in following possible scenarios:
The NFC link has been lost
|
abstract byte[] |
processNfcFPacket(byte[] commandPacket,
Bundle extras)
This method will be called when a NFC-F packet has been received
from a remote device.
|
void |
sendResponsePacket(byte[] responsePacket)
Sends a response packet back to the remote device.
|
attach, dump, getApplication, onConfigurationChanged, onCreate, onDestroy, onLowMemory, onRebind, onStart, onStartCommand, onTaskRemoved, onTrimMemory, onUnbind, setForeground, startForeground, stopForeground, stopForeground, stopSelf, stopSelf, stopSelfResult
attachBaseContext, bindService, bindServiceAsUser, canStartActivityForResult, checkCallingOrSelfPermission, checkCallingOrSelfUriPermission, checkCallingPermission, checkCallingUriPermission, checkPermission, checkPermission, checkSelfPermission, checkUriPermission, checkUriPermission, checkUriPermission, clearWallpaper, createApplicationContext, createConfigurationContext, createCredentialProtectedStorageContext, createDeviceProtectedStorageContext, createDisplayContext, createPackageContext, createPackageContextAsUser, databaseList, deleteDatabase, deleteFile, deleteSharedPreferences, enforceCallingOrSelfPermission, enforceCallingOrSelfUriPermission, enforceCallingPermission, enforceCallingUriPermission, enforcePermission, enforceUriPermission, enforceUriPermission, fileList, getApplicationContext, getApplicationInfo, getAssets, getBaseContext, getBasePackageName, getCacheDir, getClassLoader, getCodeCacheDir, getContentResolver, getDatabasePath, getDataDir, getDir, getDisplay, getDisplayAdjustments, getExternalCacheDir, getExternalCacheDirs, getExternalFilesDir, getExternalFilesDirs, getExternalMediaDirs, getFilesDir, getFileStreamPath, getMainLooper, getNoBackupFilesDir, getObbDir, getObbDirs, getOpPackageName, getPackageCodePath, getPackageManager, getPackageName, getPackageResourcePath, getResources, getSharedPreferences, getSharedPreferences, getSharedPreferencesPath, getSystemService, getSystemServiceName, getTheme, getThemeResId, getUserId, getWallpaper, getWallpaperDesiredMinimumHeight, getWallpaperDesiredMinimumWidth, grantUriPermission, isCredentialProtectedStorage, isDeviceProtectedStorage, isRestricted, moveDatabaseFrom, moveSharedPreferencesFrom, openFileInput, openFileOutput, openOrCreateDatabase, openOrCreateDatabase, peekWallpaper, registerReceiver, registerReceiver, registerReceiverAsUser, removeStickyBroadcast, removeStickyBroadcastAsUser, revokeUriPermission, sendBroadcast, sendBroadcast, sendBroadcast, sendBroadcast, sendBroadcastAsUser, sendBroadcastAsUser, sendBroadcastAsUser, sendBroadcastMultiplePermissions, sendOrderedBroadcast, sendOrderedBroadcast, sendOrderedBroadcast, sendOrderedBroadcast, sendOrderedBroadcastAsUser, sendOrderedBroadcastAsUser, sendOrderedBroadcastAsUser, sendStickyBroadcast, sendStickyBroadcastAsUser, sendStickyBroadcastAsUser, sendStickyOrderedBroadcast, sendStickyOrderedBroadcastAsUser, setTheme, setWallpaper, setWallpaper, startActivities, startActivities, startActivitiesAsUser, startActivity, startActivity, startActivityAsUser, startActivityAsUser, startActivityForResult, startInstrumentation, startIntentSender, startIntentSender, startService, startServiceAsUser, stopService, stopServiceAsUser, unbindService, unregisterReceiver
bindServiceAsUser, createCredentialEncryptedStorageContext, createDeviceEncryptedStorageContext, getColor, getColorStateList, getDrawable, getSharedPrefsFile, getString, getString, getSystemService, getText, isCredentialEncryptedStorage, isDeviceEncryptedStorage, migrateDatabaseFrom, migrateSharedPreferencesFrom, obtainStyledAttributes, obtainStyledAttributes, obtainStyledAttributes, obtainStyledAttributes, registerComponentCallbacks, unregisterComponentCallbacks
public static final String SERVICE_INTERFACE
Intent
action that must be declared as handled by the service.public static final String SERVICE_META_DATA
public static final int DEACTIVATION_LINK_LOSS
onDeactivated(int)
.
Indicates deactivation was due to the NFC link
being lost.public static final int MSG_COMMAND_PACKET
public static final int MSG_RESPONSE_PACKET
public static final int MSG_DEACTIVATED
public static final String KEY_DATA
public static final String KEY_MESSENGER
public final IBinder onBind(Intent intent)
Service
IBinder
is usually for a complex interface
that has been described using
aidl.
Note that unlike other application components, calls on to the IBinder interface returned here may not happen on the main thread of the process. More information about the main thread can be found in Processes and Threads.
onBind
in class Service
intent
- The Intent that was used to bind to this service,
as given to Context.bindService
. Note that any extras that were included with
the Intent at that point will not be seen here.public final void sendResponsePacket(byte[] responsePacket)
Note: this method may be called from any thread and will not block.
responsePacket
- A byte-array containing the response packet.public abstract byte[] processNfcFPacket(byte[] commandPacket, Bundle extras)
This method will be called when a NFC-F packet has been received from a remote device. A response packet can be provided directly by returning a byte-array in this method. Note that in general response packets must be sent as quickly as possible, given the fact that the user is likely holding his device over an NFC reader when this method is called.
This method is running on the main thread of your application.
If you cannot return a response packet immediately, return null
and use the sendResponsePacket(byte[])
method later.
commandPacket
- The NFC-F packet that was received from the remote deviceextras
- A bundle containing extra data. May be null.public abstract void onDeactivated(int reason)
reason
- DEACTIVATION_LINK_LOSS