今回は、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 件のコメント:
コメントを投稿