Google から Nfc Demo をインストールしましたが、Tag から情報を読み取らず、fakeTag 情報を提供するだけです。nfcタグから読み取るようにサンプルを変更できる場所はありますか? または、誰かが nexus 用の動作する nfc デモを持っていますか?
nfc デモを動作させることができれば、多くの人が自分で nfc デモを開発する可能性があります。
よろしくアレクサンダー
タグIDを取得するのと同じ問題がありました。B@2346323143 スタイル データを画面に表示しました。私はそれを次のように動作させました:
byte[] byte_id = intent.getByteArrayExtra(NfcAdapter.EXTRA_ID);
byte[] を 16 進文字列に変換する必要があります。たとえば、次の方法を使用します。
private static final byte[] HEX_CHAR_TABLE = { (byte) '0', (byte) '1',
(byte) '2', (byte) '3', (byte) '4', (byte) '5', (byte) '6',
(byte) '7', (byte) '8', (byte) '9', (byte) 'A', (byte) 'B',
(byte) 'C', (byte) 'D', (byte) 'E', (byte) 'F' };
public static String getHexString(byte[] raw, int len) {
byte[] hex = new byte[2 * len];
int index = 0;
int pos = 0;
for (byte b : raw) {
if (pos >= len)
break;
pos++;
int v = b & 0xFF;
hex[index++] = HEX_CHAR_TABLE[v >>> 4];
hex[index++] = HEX_CHAR_TABLE[v & 0xF];
}
return new String(hex);
}
NfcDemo には 2 つの部分があります。NFC タグのインテントに応答するディテクタ アクティビティがあり、最初の部分に偽のタグ インテントを送信できるようにする FakeTag アクティビティがあります。ただし、最初の部分は、NFC が有効になっている限り、実際の NFC タグも検出します。[設定] -> [ワイヤレス] で、NFC がオンになっているかどうかを確認します。それがあり、NfcDemo がインストールされている場合は、NFC タグを検出できるはずです。ただし、NfcDemo は NDEF タグを検出するようにのみ構成されているため、他のタイプの NFC タグ (Mifare Classic など) がある場合は、別のアプリを入手するか、NfcDemo を変更して他の NFC タグ タイプを処理する必要があります。
実際のタグを読み書きするための実用的なサンプル プロジェクトなど、Android での NFC 用のツールをいくつか作成しました。また、興味のある NFCDemo プロジェクトを簡単に書き直しました。
また、ブロードキャストの送受信機能をNFC 開発者アプリに追加して、より多くの人が NFC で遊べるように、つまり NFC デバイスを必要とせずに済むようにしました。
私はいくつかの基本的な NFC 機能を備えたクラスを作成しました。他の誰かが NFC タグを読み取る解決策を得るのに役立つことを願っています。
public class StatusMessage extends Activity {
/**
* Returns the Status of the Nfc Device with a String "enabled" or "disabled"
* \return Status NfcDevice
* @author Falkenstein
*
*/
public static String getStatusNfcDevice () {
NfcAdapter nfcAdapter = NfcAdapter.getDefaultAdapter();
if (nfcAdapter.isEnabled()) {
String status = "enabled";
return status;
}
else {
String status = "disabled";
return status;
}
}
/**
* Returns the TagId. Needs an Intent. So you have to get you intent from your "main" activity and give it to the method -> just add the following *lines in your "main class"
*Intent intent =new Intent();
*System.out.println(com.example.StatusMessage.getNfcAdapterExtraID(intent));
*@author Falkenstein
*/
public static String getNfcAdapterExtraID (Intent intent) {
byte[] byte_id = intent.getByteArrayExtra(NfcAdapter.EXTRA_ID);
return byte_id.toString();
}
/**
* Converts a byte to a String.
* @param input
* @return byte
*/
public String byteToStr(byte[] input) {
StringBuffer buffer = new StringBuffer();
for (int i = 0; i < input.length; i++)
if (input[i] != 0) {
buffer.append( new Character((char)input[i]).toString());
}
return buffer.toString();
}
/**
* Converts a String to a Byte
* @param input
* @return
*/
public byte[] strToByte(String input) {
byte[] buffer = new byte[(input.length()+1)*2];
for (int i = 0; i < buffer.length-2; i = i+2) {
buffer[i] = (byte)input.charAt(i/2);
buffer[i+1] = 0;
}
buffer[buffer.length-2] = 0;
buffer[buffer.length-1] = 0;
return buffer;
}