首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >启动应用程序,只需与phonegap cordova进行一次触摸即可显示NFC标签信息。

启动应用程序,只需与phonegap cordova进行一次触摸即可显示NFC标签信息。
EN

Stack Overflow用户
提问于 2016-01-17 04:34:50
回答 2查看 340关注 0票数 0

我试图在Android上编写一个应用程序,它可以使用phonegap读取和显示NFC标记的信息。设想如下:

  • 0.智能手机和NFC标签互相触摸。
  • 1.我的应用程式会自动启动。
  • 2.在应用程序屏幕上显示NFC标签信息

任务可以通过在manifest.xml文件中添加过滤器来完成。

在应用程序启动后,可以不碰NFC标记一次就完成2.任务吗?

谢谢

EN

回答 2

Stack Overflow用户

发布于 2016-01-20 02:01:58

您需要写入NFC上的标记。

  1. 你需要阅读的信息
  2. 您的应用程序包名称。

在报表中向活动添加筛选器

代码语言:javascript
运行
复制
       <intent-filter>
            <action android:name="android.nfc.action.NDEF_DISCOVERED" />
            <category android:name="android.intent.category.DEFAULT" />
            <data android:mimeType="text/plain" />
        </intent-filter>

并添加许可

代码语言:javascript
运行
复制
<uses-permission android:name="android.permission.NFC" />
<uses-feature
    android:name="android.hardware.nfc"
    android:required="true" />

在NfcReader.java中

代码语言:javascript
运行
复制
    public String getNfcData(Intent intent) {
    if (intent.hasExtra(NfcAdapter.EXTRA_TAG)) {
        Parcelable[] parcelables = intent.getParcelableArrayExtra(NfcAdapter.EXTRA_NDEF_MESSAGES);

        if (parcelables != null && parcelables.length > 0) {
            String data = readTextFromMessage((NdefMessage) parcelables[0]);
            return data;
        } else {
            Toast.makeText(context, "Cannot Read From Tag.", Toast.LENGTH_LONG).show();
            return "No NDEF messages found!";
        }
    }
    return "";

}

代码语言:javascript
运行
复制
    String readTextFromMessage(NdefMessage ndefMessage) {

    NdefRecord[] ndefRecords = ndefMessage.getRecords();

    if (ndefRecords != null && ndefRecords.length > 0) {

        NdefRecord ndefRecord = ndefRecords[0];

        String tagContent = getTextFromNdefRecord(ndefRecord);


        return tagContent;

    } else {
        return "No NDEF records found!";
    }

}

代码语言:javascript
运行
复制
      public String getTextFromNdefRecord(NdefRecord ndefRecord) {
    String tagContent = null;
    try {
        byte[] payload = ndefRecord.getPayload();
        String textEncoding = ((payload[0] & 128) == 0) ? "UTF-8" : "UTF-16";
        int languageSize = payload[0] & 0063;
        tagContent = new String(payload, languageSize + 1,
                payload.length - languageSize - 1, textEncoding);
    } catch (UnsupportedEncodingException e) {
        Log.e("getTextFromNdefRecord", e.getMessage(), e);
    }
    Log.e("log", "getTextFromNdefRecord");
    return tagContent;
}

在你的主要活动

代码语言:javascript
运行
复制
     protected void onResume() {
    super.onResume();


    if (getIntent().hasExtra(NfcAdapter.EXTRA_TAG)) {
        String NfcID = nfcReader.getNfcID(getIntent());
        String tagData = nfcReader.getNfcData(getIntent());
        String nfcPackage = nfcReader.readNfcPackage(getIntent());

        Log.d(Const.TAG, "NFCID: " + NfcID);
        Log.d(Const.TAG, "Data: " + tagData);
        Log.d(Const.TAG, "package Name: " + nfcPackage);

        if (nfcPackage.equals(Const.packageName)) {
            prefs.edit().putString(Const.VAN_NUMBER_PREF, tagData).commit();
            vanNumberTxt.setText("Van #: " + tagData);
            Tools.vibrator(this);
            toggleButton.setChecked(true);
        } else finish();
    }
票数 1
EN

Stack Overflow用户

发布于 2016-01-22 02:35:26

谢谢@Davit Avetisyan的详细代码

因此,获取标记信息的键是从意图中提取的。

代码语言:javascript
运行
复制
Intent intent = getIntent();

Tag tag = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG);
String myTagId = bytesToHexString(tag.getId());

Parcelable[] rawMsgs = intent.getParcelableArrayExtra(NfcAdapter.EXTRA_NDEF_MESSAGES);
NdefMessage[] msgs = new NdefMessage[rawMsgs.length];

NdefRecord[] records = msgs[i].getRecords();

byte[] payload = records[j].getPayload();
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34835137

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档