今回は、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"/>さらに、FeliCaサービスを使用するため、下記のようにサービス宣言を追加する。
<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) {} } } }さらっと出てきたFelicaEventAdapterは、FelicaEventListenerインターフェースを空実装(処理無し)したものなのでここでは割愛する。
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 件のコメント:
コメントを投稿