3

同様の質問 - Android で検出された NFC タグ (NDEF コンテンツ) の詳細を読み取る方法は?

Android アプリで、検出された NDEF メッセージを読み取って解析できるようにしたいと考えています。

AndroidManifest.xml を編集して nfc タグを検出し、次のようなインテント フィルターを追加しました。

            <intent-filter>
            <action android:name="android.nfc.action.TAG_DISCOVERED"/>
            <category android:name="android.intent.category.DEFAULT"/>
    </intent-filter>

SDK に付属の NFCDemo サンプル アプリを使用して MockNDEFtag を作成すると、これらの生成されたタグを処理するために選択できるアプリケーションのリストが表示されるので、これで問題ないと思います。次にアプリをクリックすると、問題なく開きます。必要なのは、NDEF メッセージで渡されたデータを読み取る方法だけです。コード:

 Tag myTag = (Tag) nfcintent.getParcelableExtra(NfcAdapter.EXTRA_TAG);

 // get NDEF tag details
 Ndef ndefTag = Ndef.get(myTag);
 ...
 NdefMessage ndefMesg = ndefTag.getCachedNdefMessage();

同様の質問で提案され、ウェブ全体で多くの同様の回答が見つかりました。私の問題はコード行にあります

"Tag myTag = (Tag) nfcintent.getParcelableExtra(NfcAdapter.EXTRA_TAG);"

「nfcintent を解決できません」というエラーが表示されますが、コードの作成者が nfcintent をアプリ固有のインテントのプレースホルダーとして配置している可能性が高いことに気付きましたが、その場所に何を配置すればよいかわかりません。

アプリを起動するメインアクティビティは次のようになります

public class TabsActivity extends TabActivity {

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    TabHost tabHost = getTabHost();

    // Tab for Graph
    TabSpec graphspec = tabHost.newTabSpec("Graph");
    // setting Title and Icon for the Tab
    graphspec.setIndicator("Graph");
    Intent graphIntent = new Intent(this, GraphActivity.class);
    graphspec.setContent(graphIntent);

    // Tab for Intro
    TabSpec introspec = tabHost.newTabSpec("Intro");
    introspec.setIndicator("Intro");
    Intent introIntent = new Intent(this, IntroActivity.class);
    introspec.setContent(introIntent);


    // Adding all TabSpec to TabHost
    tabHost.addTab(introspec); // Adding intro tab
    tabHost.addTab(graphspec); // Adding graph tab

}

}

これでアプリが起動すると、NFCタグを処理する必要があると思います。タグから NDEFMessage にアクセスできれば、Android サンプル アプリの NdefMessageParser で解析できます。NDEFmessage からの情報を解析し、最終的にアプリの各タブからその情報にアクセスできるようにしたいと考えています。

4

2 に答える 2

2

Tag からメッセージを抽出するには、次のスニペットを試してください。

Parcelable[] rawMsgs = intent
            .getParcelableArrayExtra(NfcAdapter.EXTRA_NDEF_MESSAGES);
    NdefMessage msg = (NdefMessage) rawMsgs[0];
    extractMessage(msg);

private void extractMessage(NdefMessage msg) {
        byte[] array = null;
        array = msg.getRecords()[0].getPayload();
}

NFCリーダー/ライターのこのサンプルもチェックしてください

于 2012-07-28T05:48:34.433 に答える
2

私の場合、NFCタグを渡してアクティビティを開始するインテントを取得するには、「nfcintent」を使用するだけです

Intent nfcintent = getIntent();
于 2012-08-15T01:31:08.670 に答える