/* * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package my.home.lehome.helper; import android.content.Context; import android.nfc.NdefMessage; import android.nfc.NdefRecord; import android.nfc.NfcAdapter; import android.nfc.Tag; import android.nfc.tech.Ndef; import java.nio.charset.Charset; import java.util.Locale; /** * Created by legendmohe on 15/12/20. */ public class NFCHelper { public static NdefMessage createNdefTextAppMessage(Context context, String content) { if (content.length() == 0) return null; NdefRecord textRecord = NFCHelper.createTextRecord(content, Locale.getDefault(), true); NdefRecord aar = NdefRecord.createApplicationRecord(context.getPackageName()); return new NdefMessage(new NdefRecord[]{textRecord, aar}); } public static boolean isNfcEnable(Context context) { NfcAdapter adapter = NfcAdapter.getDefaultAdapter(context); return adapter != null && adapter.isEnabled(); } public static boolean isNfcSupported(Context context) { return NfcAdapter.getDefaultAdapter(context) != null; } public static boolean writableTag(Tag tag) { try { Ndef ndef = Ndef.get(tag); if (ndef != null) { ndef.connect(); if (!ndef.isWritable()) { ndef.close(); return false; } ndef.close(); return true; } } catch (Exception e) { } return false; } public static boolean supportedTechs(String[] techs) { boolean ultralight = false; boolean nfcA = false; boolean ndef = false; for (String tech : techs) { if (tech.equals("android.nfc.tech.MifareUltralight")) { ultralight = true; } else if (tech.equals("android.nfc.tech.NfcA")) { nfcA = true; } else if (tech.equals("android.nfc.tech.Ndef") || tech.equals("android.nfc.tech.NdefFormatable")) { ndef = true; } } if (ultralight && nfcA && ndef) { return true; } else { return false; } } public static NdefRecord createTextRecord(String payload, Locale locale, boolean encodeInUtf8) { byte[] langBytes = locale.getLanguage().getBytes(Charset.forName("US-ASCII")); Charset utfEncoding = encodeInUtf8 ? Charset.forName("UTF-8") : Charset.forName("UTF-16"); byte[] textBytes = payload.getBytes(utfEncoding); int utfBit = encodeInUtf8 ? 0 : (1 << 7); char status = (char) (utfBit + langBytes.length); byte[] data = new byte[1 + langBytes.length + textBytes.length]; data[0] = (byte) status; System.arraycopy(langBytes, 0, data, 1, langBytes.length); System.arraycopy(textBytes, 0, data, 1 + langBytes.length, textBytes.length); NdefRecord record = new NdefRecord(NdefRecord.TNF_WELL_KNOWN, NdefRecord.RTD_TEXT, new byte[0], data); return record; } }