com.nttdocomo.device.felica
クラス Felica

Object
  拡張com.nttdocomo.device.felica.Felica

public final class Felica
extends Object
 [iアプリオプションAPI]

FeliCa 機能を制御する基本クラスです。

このAPIでは、便宜上、FeliCa 機能の利用形態を

に分類しており、open()を呼び出した後に、それぞれ
オンラインアクセスの場合:
getOnlineFelica()
オフラインアクセスの場合:
getOfflineFelica(int, int)
フリーエリアアクセスの場合:
getFreeArea()
アドホック通信の場合:
getAdhocDataTransfer()
を呼び出すことによって得られるオブジェクトを通じて、 目的とするアクセス・通信を実現することができます。 詳細は、それぞれのクラス・メソッドの説明を参照してください。
[DoJa-4.1 (902iS) まで] 外部 R/W からのアクセスについては専用のクラスは用意されていません。 このクラスに用意されている activate()inactivate() を利用します。
[DoJa-5.0 (903i) 以降] このクラスの activate()inactivate() を利用しなくても外部 R/W からのアクセスが可能です。 このためアプリケーション開発者は、 オンライン・オフライン・フリーエリアアクセスによるトランザクションと、 外部 R/W からのアクセスによるトランザクションを排他制御できないことに注意する必要があります。

FeliCa をオープンした状態で、音声・テレビ電話・PTT 呼発着信によりサスペンドした場合、または、 サスペンド中に音声・テレビ電話・PTT 呼発着信があった場合、強制的に close() が呼ばれます。

また、ネイティブのセキュリティ設定により FeliCa 機能がロックされている状態では、 FeliCa 機能を利用することはできません。 FeliCa をオープンした状態で、FeliCa 機能がロックされた場合は、 強制的に close() が呼ばれます。

なお、待ち受け実行時の非活性化状態では FeliCa 機能を利用することは出来ません。 活性化状態から非活性化状態に切り替えた場合には、 強制的に close() が呼ばれます。 また、ダウンロード即起動アプリからも FeliCa 機能を利用することは出来ません。

[DoJa-5.0 (903i) 以降]
アプリケーションが FeliCa IC チップの搬送波出力を開始している状態で、 音声・テレビ電話・PTT 呼発着信以外によりサスペンドした場合、 システムが強制的に搬送波を停止します。

導入されたバージョン:
DoJa-3.0 (506iC)、DoJa-3.5 (900iC)

メソッドの概要
static void activate()
          推奨されていません。  DoJa-5.0 (903i) 以降では、 このメソッドを呼び出さなくても外部 R/W からのアクセスを受け付けることができるため、 このメソッドはサポートされません。
static void close()
          FeliCa をクローズします。
static AdhocDataTransfer getAdhocDataTransfer()
           アドホック通信用に AdhocDataTransfer オブジェクトを取得します。
static FreeArea getFreeArea()
          フリーエリアアクセス用に、FreeAreaオブジェクトを取得します。
static int[] getLockedNodeList()
           このアプリケーションに関係するノード(エリア・サービス)のうち、 遠隔個別領域停止中のノードリストを取得します。
static OfflineFelica getOfflineFelica(int card, int systemCode)
           オフライン処理用に、OfflineFelicaオブジェクトを取得します。
static OnlineFelica getOnlineFelica()
           オンライン処理用に、OnlineFelicaオブジェクトを取得します。
static void inactivate()
          推奨されていません。  DoJa-5.0 (903i) 以降では、 activate()メソッドを呼び出さなくても外部 R/W からのアクセスを受け付けることができるため、 このメソッドはサポートされません。
static void open()
          FeliCa をオープンします。
static void reset()
          FeliCa をリセットします。
static void setFelicaPushListener(FelicaPushListener listener)
          外部 R/W から Push 通知を受信した際のイベントを受け取るリスナを登録します。
static void turnOffRFPower()
          搬送波の出力を停止します。
 
クラス Object から継承したメソッド
equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

メソッドの詳細

open

public static void open()
                 throws FelicaException
FeliCa をオープンします。 このメソッドを呼び出すと、デバイス (FeliCa IC チップ) に電源が供給されます。 既にオープンした状態で呼び出した場合には何も行いません。

[DoJa-4.1 (902iS) まで]
パーミッションとしてFeliCaオンライン機能の利用、FeliCaオフライン機能の利用の、いずれも許可されておらず、かつ、 ADF の FeliCaCPID キー、ADF の FeliCaPIN キーの いずれも指定されていない場合には、 このメソッドを呼び出した時点で例外が発生します。
[DoJa-5.0 (903i) 以降]
パーミッションとして上記が許可されている必要や、ADF キーが指定されている必要はありません。

[DoJa-5.0 (903i) 以降]
このメソッドを呼び出した時に、 FeliCa IC チップが既に搬送波検出によって起動されている場合、 例外 FelicaException(ID_OPEN_ERROR, TYPE_UNDEFINED_ERROR) が発生します。

例外:
UnsupportedOperationException - FeliCa機能をサポートしていない場合に発生します。
IllegalStateException - ダウンロード即起動アプリで呼び出された場合に発生します。
IllegalStateException - 待ち受け実行時の非活性化状態で呼び出された場合に発生します。
IllegalStateException - [DoJa-5.0 (903i) 以降] Bluetooth 通信中(一度でも Bluetooth.getInstance() 呼び出しが成功した後の状態)に呼び出された場合に発生します。
IllegalStateException - [DoJa-5.0 (903i) 以降] UART 通信中 (Connector.open() によって UART 通信を行うコネクションをオブジェクトを取得し、 かつ、そのコネクションがクローズされていない状態) に呼び出された場合に発生します。
SecurityException - [DoJa-4.1 (902iS) まで] パーミッションとしてFeliCaオンライン機能の利用、 FeliCaオフライン機能の利用の、いずれも許可されておらず、かつ、 ADF の FeliCaCPID キー、 ADF の FeliCaPIN キーの、いずれも指定されていない場合に発生します。
SecurityException - ネイティブのセキュリティ設定により FeliCa 機能がロックされている場合に発生します。
FelicaException - 外部R/Wから使用中など、FeliCaのオープンに失敗した場合に発生します (ID_OPEN_ERROR, TYPE_UNDEFINED_ERROR)。
[DoJa-5.1 (905i) 以降] 遠隔個別領域停止処理/解除処理実施中により、 FeliCa のオープンに失敗した場合にも発生します。

close

public static void close()
                  throws FelicaException
FeliCa をクローズします。 このメソッドを呼び出すと、デバイス (FeliCa IC チップ) の電源が切断されます。 既に FeliCa がクローズされている場合や、 FeliCa がオープンされていない場合には何も行いません。 オンライン通信中である場合は、 サーバーに通知することなくデバイスの電源が切断されます。

例外:
UnsupportedOperationException - FeliCa機能をサポートしていない場合に発生します。
FelicaException - FeliCaのクローズに失敗した場合に発生します (ID_CLOSE_ERROR, TYPE_UNDEFINED_ERROR)。

getOnlineFelica

public static OnlineFelica getOnlineFelica()

オンライン処理用に、OnlineFelicaオブジェクトを取得します。 このメソッドを複数回呼び出しても、常に同じインスタンスが返ります。

なお、パーミッションとしてFeliCaオンライン機能の利用が許可されていない場合には、 このメソッドを呼び出した時点でセキュリティ違反として強制終了されます。

戻り値:
OnlineFelica オブジェクトを返します。
例外:
UnsupportedOperationException - FeliCa機能をサポートしていない場合に発生します。
DeviceException - FeliCaがオープンされていない場合に発生します(ILLEGAL_STATE)。

getOfflineFelica

public static OfflineFelica getOfflineFelica(int card,
                                             int systemCode)
                                      throws FelicaException,
                                             java.io.IOException

オフライン処理用に、OfflineFelicaオブジェクトを取得します。 このメソッドを呼び出すと、 下記の設定にて、 指定されたカードに対してポーリングを行います。 同じカードの異なるシステムへの ポーリングに成功すると、そのカード内で システム切り替えが発生しPINの解除情報がクリアされます。

内部カード 外部カード
タイムアウト値500[ms] 250[ms]
リトライ数0 0

このメソッドは、引数の組合せに関係なくポーリングを行います。 ポーリングの成功結果によって取得したIDmが、 それまでに取得したことのないIDmである場合は、新規にインスタンスを生成し返します。 既に取得済みのIDmである場合は、その時と同じインスタンスを返します。

処理対象カードについて:
[DoJa-4.1 (902iS) まで]
処理対象カードにおいて、外部カードは未サポートです。 引数 card に 外部カード(OfflineFelica.CARD_EXTERNAL)が指定された場合には、 例外 UnsupportedOperationException が発生します。
[DoJa-5.0 (903i) 以降]
処理対象カードにおいて、外部カードをサポートします。 引数 card に 外部カード(OfflineFelica.CARD_EXTERNAL)を指定可能です。
システムコードについて:
[DoJa-4.1 (902iS) まで]
フリーエリアのシステムコードは指定できません。 引数 systemCode にフリーエリアのシステムコードが指定された場合には、 例外 IllegalArgumentException が発生します。
[DoJa-5.0 (903i) 以降]
管理システムのシステムコードは指定できません。 処理対象カードが内部カードである場合には、 フリーエリアのシステムコードも指定できません。 従って、以下の場合には例外 IllegalArgumentException が発生します。 なお、処理対象カードが外部カードである場合には、 フリーエリアのシステムコードを指定することができます。
  • 引数 systemCode に管理システムのシステムコードが指定された場合
  • 引数 card に 内部カード が指定された場合に、 引数 systemCode にフリーエリアのシステムコードが指定された場合
パーミッションについて:
[DoJa-4.1 (902iS) まで]
パーミッションとしてFeliCaオフライン機能の利用が許可されていない場合には、 このメソッドを呼び出した時点でセキュリティ違反として強制終了されます。
[DoJa-5.0 (903i) 以降]
以下の場合には、このメソッドを呼び出した時点でセキュリティ違反として強制終了されます。
  • パーミッションとしてFeliCaオフライン機能の利用、FeliCaリーダ/ライタ機能の利用の、いずれも許可されていない場合
  • 引数 card に 内部カード が指定された場合に、 パーミッションとしてFeliCaオフライン機能の利用が許可されていない場合
  • 引数 card に 外部カード が指定された場合に、 パーミッションとしてFeliCaリーダ/ライタ機能の利用が許可されていない場合

パラメータ:
card - 処理対象カード (OfflineFelica.CARD_INTERNAL、 またはOfflineFelica.CARD_EXTERNAL)。
systemCode - システムコード。 0 以上 216 - 1 以下の値が指定できます。
戻り値:
[DoJa-4.1 (902iS) まで]
OfflineFelica オブジェクトを返します。 引数 systemCode にワイルドカードが指定された場合、 ポーリングの成功結果によって取得したシステムコードが、 フリーエリアのシステムコードである場合は null を返します。
[DoJa-5.0 (903i) 以降]
引数 card に 内部カード が指定された場合には OfflineFelica オブジェクトを、 外部カード が指定された場合には ThruRWOfflineFelica オブジェクトを返します。 ただし、引数 systemCode にワイルドカードが指定された場合、 以下の条件を満たしたときには null を返します。
  • ポーリングの成功結果によって取得したシステムコードが管理システムのシステムコードである場合
  • 引数 card に 内部カード が指定された場合に、 ポーリングの成功結果によって取得したシステムコードがフリーエリアのシステムコードである場合
例外:
UnsupportedOperationException - FeliCa機能をサポートしていない場合に発生します。
DeviceException - FeliCaがオープンされていない場合に発生します(ILLEGAL_STATE)。
DeviceException - [DoJa-4.1 (902iS) まで] オンライン処理が既に開始されている場合や、 外部 R/W からのアクセス待ち状態下の場合に発生します(ILLEGAL_STATE)。 縺ヲ縺