uni-app 集成 nfc

发布于 1周前 作者 zlyuanteng 来自 Uni-App

uni-app 集成 nfc

2 回复

NFC完整版、同步读与写、读取连接标签、查询NDEF状态、读写NDEF(ios) :https://ext.dcloud.net.cn/plugin?id=8903


在uni-app中集成NFC(近场通信)功能,通常需要使用到设备的原生功能。由于uni-app是一个跨平台框架,其原生模块的支持依赖于平台插件或者原生代码桥接。以下是一个在Android平台上集成NFC功能的基本示例。

步骤一:配置AndroidManifest.xml

首先,需要在AndroidManifest.xml中添加NFC权限和声明NFC过滤器。

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.uniapp">

    <uses-permission android:name="android.permission.NFC" />
    <uses-feature android:name="android.hardware.nfc" android:required="true" />

    <application
        ...>
        <activity
            ...>
            <intent-filter>
                <action android:name="android.nfc.action.NDEF_DISCOVERED" />
                <category android:name="android.intent.category.DEFAULT" />
                <data android:mimeType="text/plain" />
            </intent-filter>
        </activity>
    </application>
</manifest>

步骤二:编写NFC读取逻辑(Java/Kotlin)

在Android原生代码中,需要编写NFC读取的逻辑。这部分代码可以通过uni-app的插件机制或自定义原生模块来实现。

// NfcActivity.java
package com.example.uniapp;

import android.app.PendingIntent;
import android.content.Intent;
import android.content.IntentFilter;
import android.nfc.NdefMessage;
import android.nfc.NdefRecord;
import android.nfc.NfcAdapter;
import android.nfc.Tag;
import android.nfc.tech.Ndef;
import android.os.Bundle;
import androidx.appcompat.app.AppCompatActivity;

import java.nio.charset.Charset;
import java.util.Locale;

public class NfcActivity extends AppCompatActivity {
    private NfcAdapter nfcAdapter;
    private PendingIntent pendingIntent;
    private IntentFilter[] intentFiltersArray;
    private String[][] techListsArray;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_nfc);

        nfcAdapter = NfcAdapter.getDefaultAdapter(this);
        pendingIntent = PendingIntent.getActivity(this, 0, new Intent(this, getClass()), 0);

        IntentFilter ndef = new IntentFilter(NfcAdapter.ACTION_NDEF_DISCOVERED);
        try {
            ndef.addDataType("*/*");
        } catch (IntentFilter.MalformedMimeTypeException e) {
            throw new RuntimeException("fail", e);
        }
        intentFiltersArray = new IntentFilter[]{ndef, };
        techListsArray = new String[][]{new String[]{Ndef.class.getName()}, };

        nfcAdapter.enableForegroundDispatch(this, pendingIntent, intentFiltersArray, techListsArray);
    }

    @Override
    protected void onNewIntent(Intent intent) {
        super.onNewIntent(intent);
        if (NfcAdapter.ACTION_NDEF_DISCOVERED.equals(intent.getAction())) {
            Tag tag = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG);
            NdefMessage ndefMessage = Ndef.get(tag).connect().getNdefMessage();
            NdefRecord record = ndefMessage.getRecords()[0];
            String payload = new String(record.getPayload(), Charset.forName("UTF-8"));
            // 处理NFC数据
        }
    }
}

步骤三:在uni-app中调用

通过uni-app的plus.android.importClass方法导入并使用上述原生代码。这部分代码需要具体实现插件或者模块桥接,以便在JavaScript中调用。

由于篇幅限制,这里只展示了NFC在Android平台的基本实现思路。实际开发中,你可能需要根据具体需求调整代码,并创建uni-app插件或原生模块来实现JavaScript与原生代码的通信。

回到顶部