JavaもAndroidもFeliCaもNFCも、なんとなく中途半端な知識しかない。
ないのだが、せっかく作ったので公開してみたくなるのは仕方ないだろう。
githubに、Android 3.1以上でPaSoRiを動かせるんじゃないかな、と思うライブラリを公開しました。
git clone git://github.com/hirokuma/NfcPcd.git
ProGuardをかけてみたので、うまく動くかどうかわからんです。
プロジェクトの設定で、ライブラリを追加
Java Build Path > Libraries
libnfcpcd.jarを追加。
AndroidManifest.xmlに、以下が必要。
manifest内
<uses-feature android:name="android.hardware.usb.host"></uses-feature>
activity内
<intent-filter>
<action android:name="android.hardware.usb.action.USB_DEVICE_ATTACHED" />
</intent-filter>
<meta-data android:name="android.hardware.usb.action.USB_DEVICE_ATTACHED" android:resource="@xml/device_filter" />
ソースファイルにも手が入る。
Activityソース
Activityクラスに「implements com.blogpost.hiro99ma.pcd.UsbHost.UsbListener」を付ける。
USB挿抜検知用(動くと思う)。
eclipseでやっていると、メソッドが足りん、といわれるので、いわれるままに追加。
@Override
public void inserted() {
// 挿された!
}
@Override
public void removed() {
// 抜かれた!
}
やってみたけど、挿された方はうまくいかんかったです。
onCreate()で、UsbHostのonCreate()を呼んでやるのも必要。
・・・
説明が面倒になったので、サンプルも置きました。
はてさて、どうなることやら。
おお、こんなの探してました。
返信削除がんばってください。
ありがとうございます。
返信削除動くかどうか、自分のところでしか試してないのでよくわからないんですよねぇ。
すばらしいライブラリの公開ありがとうございます。
返信削除サンプルはNexu7+RC-S330で無事動作しました。
あつかましくてすいませんが、IDmの取得はわかりましたが、データの読み取り方法がよくわかりませんでした。
何かサンプルを公開いただけるとありがたいです。
【解決】自己Resになります。
削除communicateThruExを使ってlibpasoriを参考に
・servicecodeを取得
・felica_read_without_encryption02を作成し、上で取得したサービスの読み込み
で読み込みができました。
communicateThruExがあるのでlibpasoriのコマンド移植をして、それでやるんですね。
解決されたようで、よかったです。
削除今のところFeliCa Lite用にしか作っていないので、communicateThruExを使うしかないと思います。
【お礼】
削除コメントありがとうございます。
やはりcommunicateThruExなんですね。
Nexu7だと内蔵のNFCでも読めるのですが、Pasoriのように存在感のある部分に置く方がいかにもカードリーダっぽいです。(^^!
PS.
「ニモカ残高」なども公開されていたんですね。
「ニモカ残高」はサービスコード固定なので、こんな感じで書いていますね。
削除boolean ret = NfcPcd.pollingF(0x0003);
if(ret) {
NfcF f = NfcF.getInstance();
byte[] buf = new byte[NfcPcd.SIZE_BLOCK];
int[] opt = new int[] { 0x090f }; //service code
ret = f.read(buf, 0, opt);
if(ret) {
int money = (int)(((short)buf[11]) << 8 | (((short)buf[10]) & 0x00ff));
mMoneyText.setText(Integer.toString(money) + " yen");
} else {
mMoneyText.setText(R.string.fail_read);
Log.d(TAG, "fail read.");
}
} else {
mMoneyText.setText(R.string.fail_read);
Log.d(TAG, "not FeliCa card.");
}
NfcPcd.rfOff();