uni-appがNFC読み取り機能を実装

uni-appがNFC読み取り機能を実装

この記事では、参考までに、NFC読み取り機能を実装するためのuni-appの具体的なコードを紹介します。具体的な内容は次のとおりです。

長い間ブログを書いていませんでした。今日は、学んだことをすべて記録する貴重な時間があります。

1. NFCメソッド.js

//パッケージパス const package_NdefRecord = 'android.nfc.NdefRecord';
定数 package_NdefMessage = 'android.nfc.NdefMessage';
パッケージ TECH_DISCOVERED は 'android.nfc.action.TECH_DISCOVERED' です。
定数 package_Intent = 'android.content.Intent';
定数 package_Activity = 'android.app.Activity';
パッケージのPendingIntentを'android.app.PendingIntent'に変更します。
定数 package_IntentFilter = 'android.content.IntentFilter';
定数 package_NfcAdapter = 'android.nfc.NfcAdapter';
定数 package_Ndef = 'android.nfc.tech.Ndef';
定数 package_NdefFormatable = 'android.nfc.tech.NdefFormatable';
定数 package_Parcelable = 'android.os.Parcelable';
定数 package_String = 'java.lang.String';

NfcAdapter を作成します。
NdefRecord を作成します。
NdefMessage を作成します。
let readyRead = true; //読み取りを開始します let noNFC = false;
techListsArray = [ とします
 ['android.nfc.tech.IsoDep'],
 ['android.nfc.tech.NfcA'],
 ['android.nfc.tech.NfcB'],
 ['android.nfc.tech.NfcF'],
 ['android.nfc.tech.Nfcf'],
 ['android.nfc.tech.NfcV'],
 ['android.nfc.tech.NdefFormatable'],
 ['android.nfc.tech.MifareClassi'],
 ['android.nfc.tech.MifareUltralight']
];
// 書き込むデータ let text = '{id:8888,name:nfc,stie:wangqin.com}';
readResult = '' とします。

エクスポートデフォルト{
 listenNFCStatus: 関数() {
  console.log("--------- listenNFCStatus--------------")
  that = this とする;
  試す {
   main を plus.android.runtimeMainActivity() にします。
   Intent を plus.android.importClass('android.content.Intent') に設定します。
   Activity を plus.android.importClass('android.app.Activity') とします。
   PendingIntent を plus.android.importClass('android.app.PendingIntent') に設定します。
   IntentFilter を plus.android.importClass('android.content.IntentFilter') に設定します。
   NfcAdapter は、plus.android.importClass('android.nfc.NfcAdapter') からインポートされます。
   nfcAdapter を NfcAdapter.getDefaultAdapter(main); にします。
   nfcAdapterがnullの場合
    uni.showToast({
     タイトル: 「デバイスは NFC をサポートしていません!」 '、
     アイコン: 'なし'
    })
    NFCなし = true;
    戻る;
   }
   nfcAdapter.isEnabled() の場合 {
    uni.showToast({
     タイトル: まずシステム設定でNFC機能を有効にしてください! '、
     アイコン: 'なし'
    });
    NFCなし = true;
    戻る;
   } それ以外 {
    noNFC = 偽;
   }

   intent = new Intent(main, main.getClass()); を記述します。
   Intent.FLAG_ACTIVITY_SINGLE_TOP にフラグを追加します。
   pendingIntent を PendingIntent.getActivity(main, 0, intent, 0); とします。
   ndef = new IntentFilter("android.nfc.action.TECH_DISCOVERED");
   ndef.addDataType("*/*");
   intentFiltersArray = [ndef] とします。

   //キーコード const promise = new Promise((resolve, reject) => {
    plus.globalEvent.addEventListener('newintent', 関数() {
     // ポーリングコール NFC
     // タイムアウトを設定します(that.nfcRuning(resolve), 1000);
     タイムアウトを設定する(() => {
         that.nfc実行中(解決)
     }, 1000);
    });
   })
   
   nfcAdapter.enableForegroundDispatch(main、pendingIntent、intentFiltersArray、techListsArray);
   返品の約束
  } キャッチ (e) {
  }
 },
 nfc実行中: function(resolve) {
  // console.log("--------------nfc実行中---------------")
  NdefRecord = plus.android.importClass("android.nfc.NdefRecord");
  NdefMessage は plus.android.importClass("android.nfc.NdefMessage");
  main を plus.android.runtimeMainActivity() にします。
  main.getIntent() を呼び出します。
  that = this とする;
  (package_TECH_DISCOVERED == intent.getAction()) の場合 {
    読み取り準備完了の場合
     //ここでは、読み取りメソッドを通じて NFC データを取得します。const id = that.read(intent);
    // readyRead = false;
    //データを返すresolve(id)
   }
  }
 },
 
 読み取り(意図) {
  // toast('ラベルを削除しないでください。データが読み取られています');
  that = this とする;
  // NFC ID
  bytesId を intent.getByteArrayExtra(NfcAdapter.EXTRA_ID); に設定します。
  nfc_id を that.byteArrayToHexString(bytesId) とします。

  nfc_id を返します。
 },
 byteArrayToHexString: function(inarray) { // バイト配列を文字列に変換します  
  i、j、inn とします。
  hex = ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "A", "B", "C", "D", "E", "F"] とします。
  出す = "";

  (j = 0; j < inarray.length; ++j) の場合 {
   inn = inarray[j] & 0xff;
   i = (inn >>> 4) & 0x0f;
   出力 += 16進数[i];
   i = イン & 0x0f;
   出力 += 16進数[i];
  }
  戻る;
 },

}

関数トースト(コンテンツ) {
 uni.showToast({
  タイトル: コンテンツ、
  アイコン: 'なし'
 })
}

2. NFCを使用したページでのメソッドの呼び出し

<view class="flex nfc-ewm">
  <view class="nfc-ewm-item" style="border-right: 1px solid #ccc;" @click="testNFC">
   <image src="@/assets/images/application/icon-nfc.png" alt=""></image>NFC センシング</view>
  <view class="nfc-ewm-item" @click="openScanCode">
   <image src="@/assets/images/application/icon-ewm.png" alt=""></image>QR コードのスキャン</view>
</ビュー>


「../../../../../components/hexiii-nfc/hexiii-nfc.js」からtesttestをインポートします。

 メソッド: {
  非同期テストNFC() {
   //ここでは、非同期メソッドを使用して読み取った NFC データを取得します。const nfcId = await testtest.listenNFCStatus();
   //コンソール.log(nfcId)

   //次のデータはビジネス ロジック コードです。NFC データのみを読み取る必要がある場合は、上記のコード行で十分です。
   定数arr = []
   this.list2.forEach(e => {
    arr.push(e.code)
   })
   if(!nfcId) 戻り値
   (arr.indexOf(nfcId) === -1)の場合{
    uni.showToast({
     アイコン: 'なし'、
     タイトル: 「対応する検査ポイントが見つかりません!」
     期間: 2000
    });
   } それ以外 {
    uni.showToast({
     アイコン: 'なし'、
     タイトル: 「認識に成功しました!」
     期間: 2000
    });
    uni.navigateTo({
     url: `/pages/application/XunJianGuanLi/XunJianRenWu/KaiShiXunJian3/index?id=${this.id}&spotCode=${nfcId}&delta=${this.delta+1}`,
    });
   }
  },
}

3. ページレンダリング

4. まとめ

上記はNFCデータの読み取りの実装です。ユーザーがNFCをスキャンして読み取ったデータに応じて、対応するチェックイン検査ポイントに自動的にジャンプします。コードを改善する必要があるので、さらに指導してください。NFC メソッドの最初の部分では、コードを読み取るだけでよいため、多くの冗長な未使用のコードが削除され、必要なコードだけが残されています。

以上がこの記事の全内容です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。

以下もご興味があるかもしれません:
  • JavaScriptはクッキーの書き込み、読み取り、削除機能を実装します
  • JavaScriptはクリップボードを読み取り、スクリーンショットをWebページに貼り付ける機能を実装します

<<:  MySQL mysqldump の使い方の詳しい説明

>>:  Ubuntuのソースリスト(ソースリスト)を変更する方法詳細説明

推薦する

MySQL クエリのパケットが大きすぎる問題と解決策

問題の説明:エラーメッセージ:原因: com.mysql.jdbc.PacketTooBigExce...

Dockerコンテナのk8sデプロイメントの実装

環境: (docker、k8s クラスター)、前回 docker で起動した Java プログラムの...

@Font-face の基本的な使い方と、すべてのブラウザと互換性を持たせる方法

@Font-face 基本紹介: @font-face は、Web ページにカスタム フォントを表示...

Linux オペレーティング システムに Apache サービスをインストールする方法

ダウンロードリンク:動作環境VMware 仮想マシンの CentOS 7.6セキュアCRT Xftp...

MySQLのロック構造の詳細な説明

Mysqlは3種類のロック構造をサポートしていますテーブルレベルのロック、低オーバーヘッド、高速ロッ...

HTML でスクロールバーを使用する際のヒントを共有する

今日、牛南ニュースリリースシステムについて学んでいたとき、牛南先生はスクロールバーに関するいくつかの...

HTML フレーム、Iframe、フレームセットの違い

10.4.1 フレームセットとフレームの違い まず、フレームセットとフレームの違いについて説明します...

6つの珍しいHTMLタグ

まず: <abbr> または <acronym>これら 2 つの記号は同じ意...

Docker での FastAPI デプロイの詳細なプロセス

Docker 学習https://www.cnblogs.com/poloyy/p/15257059...

CentOS 7 で MySQL 接続数が 214 に制限される問題の解決方法

問題を見つける最近、プロジェクトで問題が発生しました。接続が多すぎるため、「接続が多すぎます」という...

jsオブジェクトの読み取り速度の詳細な例

1. リテラルとローカル変数へのアクセスは最も高速ですが、配列要素とオブジェクト メンバーへのアクセ...

MySql5.7.21 インストールポイント記録メモ

ダウンロードしたバージョンは、Zip 解凍版、Windows システムです。長い間 Windows ...

MySQL のインデックスと制約の例文

外部キーテーブルの主キーがどのテーブルの外部キーであるかを照会する 選択 テーブル名、 列名、 制約...

CSS3アニメーションジャミングソリューションについての簡単な説明

なぜ詰まっているのでしょうか?言及しなければならない前提があります。フロントエンド開発者は皆、ブラウ...

Linux ssh サービス情報と実行ステータスを表示する方法

Linux での ssh サービス構成など、ssh サーバー構成に関する記事は多数あります。ここでは...