如何主动读取NFC标签 - 没有Intent

时间:2014-01-23 12:16:22

标签: android android-intent nfc

我想在不使用Intent的情况下扫描NFC标签。换句话说,我想强制扫描。我已经读过了:

http://developer.android.com/guide/topics/connectivity/nfc/index.html

https://code.google.com/p/ndef-tools-for-android/

但两者都使用Intents。

P.S。:我的情况是NFC标签永久地附着在设备上,所以我不能使用意图。

3 个答案:

答案 0 :(得分:2)

使用foreground dispatchhttp://developer.android.com/guide/topics/connectivity/nfc/advanced-nfc.html#foreground-dispatch

 @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        nfcAdapter = NfcAdapter.getDefaultAdapter(this);

        if (nfcAdapter == null || !nfcAdapter.isEnabled()) {
            Log.e(TAG, "No NFC Adapter found.");
            //finish();
        }

        Intent intent = new Intent(this, getClass());
        intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
        //intent.addFlags(Intent.FLAG_RECEIVER_REPLACE_PENDING);
        pendingIntent = PendingIntent.getActivity(this, 0, intent, 0);

        IntentFilter ndef = new IntentFilter(NfcAdapter.ACTION_NDEF_DISCOVERED);
        try {
            // Handles all MIME based dispatches. You should specify only the ones that you need.
            ndef.addDataType("*/*");
        } catch (IntentFilter.MalformedMimeTypeException e) {
            throw new RuntimeException("failed to add MIME type", e);
        }
        //intentFiltersArray = new IntentFilter[]{ndef,};

        //Use no intent filters to accept all MIME types
        intentFiltersArray = new IntentFilter[]{};

        // The tech list array can be set to null to accept all types of tag
        techListsArray = new String[][]{new String[]{
                IsoDep.class.getName(),
                NfcA.class.getName(),
                NdefFormatable.class.getName()
        }};
    }

    public void onPause() {
        nfcAdapter.disableForegroundDispatch(this);

        super.onPause();
    }

    public void onResume() {
        nfcAdapter.enableForegroundDispatch(this, pendingIntent, intentFiltersArray, techListsArray);

        super.onResume();
    }

    public void onNewIntent(Intent intent) {
        Tag nfcTag = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG);
        //do something with tagFromIntent
}

答案 1 :(得分:0)

易。 当你达到“灵活性”的时候......你真的改变了。使用INTENt,读取标签,并将信息保存在您的SD卡,共享首选项,云端的任何地方。 每次要阅读TAG时都要使用此信息。而是读取附加标签时创建的文件。 下次当您删除标记并添加另一个标记时,将重新创建您的文件。

不读取标签,读取附加到设备的标签创建的文件。

答案 2 :(得分:0)

你无法做你想做的事。由于Android NFC子系统的构建方式,无法在没有意图的情况下读取标签。

将标签粘贴到手机背面也是一个非常糟糕的主意。 NFC将 - 只要没有检测到标签 - 定期检查是否存在标签。一旦检测到标签,它将通过空气供电,直到标签不再响应。

如果标签总是在手机的范围内,它会像疯了一样耗尽电池寿命。