今回は、FeliCa Networksが公開しているモバイルFeliCaクライアント for Androidを使ってお手元の端末がおサイフケータイなのか否かを判別する。
必要な作業
- AndroidManifest.xmlへの設定追加
- FeliCaサービス(com.felicanetworks.mfc.Felica)と接続するインターフェースを実装
- FeliCaサービスとの接続(bindService)
- FeliCaをサポートしているかチェック(FeliCaチップの利用開始処理を試行)
AndroidManifest.xmlへの設定追加
AndroidManifestには、FeliCaチップにアクセスするためのパーミッション設定を下記のように追加する。
- <uses-permission
- android:name="com.felicanetworks.mfc.permission.MFC_ACCESS"/>
- <service
- android:name="com.felicanetworks.mfc.Felica"
- android:exported="false"/>
サービス接続インターフェース実装
サービス接続インターフェース(ServiceConnection)には、サービスの状態をモニタリングするメソッドが定義されている。 今回は、下記2つの役割を担うクラスとして実装する。
- FeliCaサービスとの接続が確立された時点でFeliCaチップにアクセスするためのオブジェクトを得る
- FeliCaチップの利用開始処理を試行し、成功=FeliCa搭載端末と判定する
- public class FelicaConnection implements ServiceConnection
- {
- private Felica mFelica;
- @Override
- public void onServiceConnected(ComponentName name, IBinder service)
- {
- // FeliCaチップアクセスオブジェクト取得
- mFelica
- = ((Felica.LocalBinder)service).getInstance();
- }
- @Override
- public void onServiceDisconnected(ComponentName name)
- {
- try {
- mFelica.inactivateFelica();
- }
- catch (Exception ignore) {}
- }
- /**
- * FeliCaをサポートしているかどうかチェックする。
- * @return true:サポートしている
- * false:サポートしていない
- */
- public boolean isSupported()
- {
- try
- {
- // FeliCaチップ利用開始
- mFelica.activateFelica(null, new FelicaEventAdapter());
- return true;
- }
- catch (Exception e)
- {
- // 失敗するとここに来る
- return false;
- }
- finally
- {
- try
- {
- mFelica.inactivateFelica();
- }
- catch (Exception ignore) {}
- }
- }
- }
FeliCaサービスとの接続
FeliCaサービスとの接続は、通常のサービス接続と何も変わらず、下記のような感じに実装する。
- Context ctx = getApplicationContext();
- // サービスを識別するインテント
- Intent intent
- = new Intent(ctx, Felica.class);
- // サービス接続インターフェース
- FelicaConnection conn
- = new FelicaConnection();
- // 接続
- boolean result = ctx.bindService(
- intent,
- conn,
- Context.BIND_AUTO_CREATE);
FeliCa搭載チェック
最後に、用意しておいたFeliCaサポートチェックメソッドを呼び出して、サービス接続を切ったら終了。 コードは上の続き。
- boolean supported = false;
- // 接続に成功した場合のみ
- if (result)
- {
- supported = conn.isSupported();
- // サービス切断
- getApplicationContext().unbindService(conn);
- }
- // FeliCa搭載してるか否か!?
- return supported;
注意点
- FeliCaのサイトからダウンロードしたMFCUtility_1.0.1.jarを静的にリンクしておく必要がある(やってないとコンパイルすら通らないので気付くと思うけど:D)
- FeliCaチップ利用開始処理(activateFelica())を行うと、利用終了処理(inactivateFelica())を行うまでは他のアプリケーションがFeliCaチップを利用できなくなる。
0 件のコメント:
コメントを投稿