类android.nfc.Tag源码实例Demo

下面列出了怎么用android.nfc.Tag的API类实例代码及写法,或者点击链接到github查看源代码。

源代码1 项目: yubikit-android   文件: NfcReaderDispatcher.java
/**
 * Start intercepting nfc events
 * @param activity activity that is going to receive nfc events
 * Note: invoke that while activity is in foreground
 */
private void enableReaderMode(Activity activity, final NfcConfiguration nfcConfiguration) {
    NfcAdapter.ReaderCallback callback = new NfcAdapter.ReaderCallback() {
        public void onTagDiscovered(Tag tag) {
            handler.onTag(tag);
        }
    };
    Bundle options = new Bundle();
    options.putInt(NfcAdapter.EXTRA_READER_PRESENCE_CHECK_DELAY, 50);
    int READER_FLAGS = NfcAdapter.FLAG_READER_NFC_A | NfcAdapter.FLAG_READER_NFC_B;
    if (nfcConfiguration.isDisableNfcDiscoverySound()) {
        READER_FLAGS |= NfcAdapter.FLAG_READER_NO_PLATFORM_SOUNDS;
    }

    if (nfcConfiguration.isSkipNdefCheck()) {
        READER_FLAGS |= NfcAdapter.FLAG_READER_SKIP_NDEF_CHECK;
    }
    adapter.enableReaderMode(activity, callback, READER_FLAGS, options);
}
 
源代码2 项目: android-nfc   文件: WriteMUActivity.java
@Override
public void onNewIntent(Intent intent) {
    Tag tag = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG);
    String[] techList = tag.getTechList();
    boolean haveMifareUltralight = false;
    for (String tech : techList) {
        if (tech.indexOf("MifareUltralight") >= 0) {
            haveMifareUltralight = true;
            break;
        }
    }
    if (!haveMifareUltralight) {
        Toast.makeText(this, "不支持MifareUltralight数据格式", Toast.LENGTH_SHORT).show();
        return;
    }
    writeTag(tag);
}
 
源代码3 项目: nordpol   文件: TagDispatcher.java
private void dispatchTag(final Tag tag) {
if(dispatchOnUiThread) {
    if(Looper.myLooper() != Looper.getMainLooper()) {
        new Handler(Looper.getMainLooper()).post(new Runnable() {
                @Override
                public void run() {
                    tagDiscoveredListener.tagDiscovered(tag);
                }
            });
    } else {
        tagDiscoveredListener.tagDiscovered(tag);
    }

} else {
    new AsyncTask<Void, Void, Void>() {
 
源代码4 项目: android-nfc   文件: ReadMUActivity.java
@Override
public void onNewIntent(Intent intent) {
    Tag tag = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG);
    String[] techList = tag.getTechList();
    boolean haveMifareUltralight = false;
    for (String tech : techList) {
        if (tech.indexOf("MifareUltralight") >= 0) {
            haveMifareUltralight = true;
            break;
        }
    }
    if (!haveMifareUltralight) {
        Toast.makeText(this, "不支持MifareUltralight数据格式", Toast.LENGTH_SHORT).show();
        return;
    }
    String data = readTag(tag);
    if (data != null)
        Toast.makeText(this, data, Toast.LENGTH_SHORT).show();
}
 
源代码5 项目: android-nfc   文件: WriteUriActivity.java
/**
 * 写入标签
 *
 * @param message
 * @param tag
 * @return
 */
public static boolean writeTag(NdefMessage message, Tag tag) {
    int size = message.toByteArray().length;
    try {
        Ndef ndef = Ndef.get(tag);
        if (ndef != null) {
            ndef.connect();
            if (!ndef.isWritable()) {
                return false;
            }
            if (ndef.getMaxSize() < size) {
                return false;
            }
            ndef.writeNdefMessage(message);
            return true;
        }
    } catch (Exception e) {
    }
    return false;
}
 
源代码6 项目: nordpol   文件: TagDispatcher.java
@TargetApi(Build.VERSION_CODES.KITKAT)
private void enableReaderMode(NfcAdapter adapter) {
    Bundle options = new Bundle();
    if(broadcomWorkaround) {
        /* This is a work around for some Broadcom chipsets that does
         * the presence check by sending commands that interrupt the
         * processing of the ongoing command.
         */
        options.putInt(NfcAdapter.EXTRA_READER_PRESENCE_CHECK_DELAY, DELAY_PRESENCE);
    }
    NfcAdapter.ReaderCallback callback = new NfcAdapter.ReaderCallback() {
            public void onTagDiscovered(Tag tag) {
                dispatchTag(tag);
            }
        };
    int flags = NfcAdapter.FLAG_READER_NFC_A | NfcAdapter.FLAG_READER_NFC_B;
    if(disableSounds) {
        flags = flags | NfcAdapter.FLAG_READER_NO_PLATFORM_SOUNDS;
    }
    if(disableNdefCheck) {
        flags = flags | NfcAdapter.FLAG_READER_SKIP_NDEF_CHECK;
    }
    adapter.enableReaderMode(activity, callback, flags, options);
}
 
源代码7 项目: GreenBits   文件: RequestLoginActivity.java
@Override
public void tagDiscovered(final Tag t) {
    Log.d(TAG, "tagDiscovered " + t);
    mTag = t;
    if (mTransportFuture == null)
        return;

    final BTChipTransport transport = getTransport(t);
    if (transport == null)
        return;

    if (mTransportFuture.set(transport)) {
        if (mNfcWaitDialog == null)
            return;

        runOnUiThread(new Runnable() { public void run() { mNfcWaitDialog.hide(); } });
    }
}
 
源代码8 项目: 365browser   文件: NfcTagHandler.java
/**
 * Factory method that creates NfcTagHandler for a given NFC Tag.
 *
 * @param tag @see android.nfc.Tag
 * @return NfcTagHandler or null when unsupported Tag is provided.
 */
public static NfcTagHandler create(Tag tag) {
    if (tag == null) return null;

    Ndef ndef = Ndef.get(tag);
    if (ndef != null) return new NfcTagHandler(ndef, new NdefHandler(ndef));

    NdefFormatable formattable = NdefFormatable.get(tag);
    if (formattable != null) {
        return new NfcTagHandler(formattable, new NdefFormattableHandler(formattable));
    }

    return null;
}
 
源代码9 项目: host-card-emulation-sample   文件: MainActivity.java
@Override
public void onTagDiscovered(Tag tag) {
	IsoDep isoDep = IsoDep.get(tag);
	IsoDepTransceiver transceiver = new IsoDepTransceiver(isoDep, this);
	Thread thread = new Thread(transceiver);
	thread.start();
}
 
源代码10 项目: android_9.0.0_r45   文件: NfcA.java
/** @hide */
public NfcA(Tag tag) throws RemoteException {
    super(tag, TagTechnology.NFC_A);
    Bundle extras = tag.getTechExtras(TagTechnology.NFC_A);
    mSak = extras.getShort(EXTRA_SAK);
    mAtqa = extras.getByteArray(EXTRA_ATQA);
}
 
源代码11 项目: android_9.0.0_r45   文件: NfcBarcode.java
/**
 * Internal constructor, to be used by NfcAdapter
 * @hide
 */
public NfcBarcode(Tag tag) throws RemoteException {
    super(tag, TagTechnology.NFC_BARCODE);
    Bundle extras = tag.getTechExtras(TagTechnology.NFC_BARCODE);
    if (extras != null) {
        mType = extras.getInt(EXTRA_BARCODE_TYPE);
    } else {
        throw new NullPointerException("NfcBarcode tech extras are null.");
    }
}
 
源代码12 项目: MifareClassicTool   文件: MCReader.java
/**
 * Initialize a MIFARE Classic reader for the given tag.
 * @param tag The tag to operate on.
 */
private MCReader(Tag tag) {
    MifareClassic tmpMFC;
    try {
        tmpMFC = MifareClassic.get(tag);
    } catch (Exception e) {
        Log.e(LOG_TAG, "Could not create MIFARE Classic reader for the"
                + "provided tag (even after patching it).");
        throw e;
    }
    mMFC = tmpMFC;
}
 
源代码13 项目: android_9.0.0_r45   文件: NfcB.java
/** @hide */
public NfcB(Tag tag) throws RemoteException {
    super(tag, TagTechnology.NFC_B);
    Bundle extras = tag.getTechExtras(TagTechnology.NFC_B);
    mAppData = extras.getByteArray(EXTRA_APPDATA);
    mProtInfo = extras.getByteArray(EXTRA_PROTINFO);
}
 
源代码14 项目: timelapse-sony   文件: NFCHandler.java
public static Pair<String, String> parseIntent(Intent intent) throws Exception {

        Tag tagFromIntent = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG);
        Parcelable[] messages = intent.getParcelableArrayExtra(NfcAdapter.EXTRA_NDEF_MESSAGES);

        if (tagFromIntent != null && messages != null) {
            return getCameraWifiSettingsFromTag(tagFromIntent, messages);
        }

        return null;
    }
 
源代码15 项目: android_9.0.0_r45   文件: IsoDep.java
/** @hide */
public IsoDep(Tag tag)
        throws RemoteException {
    super(tag, TagTechnology.ISO_DEP);
    Bundle extras = tag.getTechExtras(TagTechnology.ISO_DEP);
    if (extras != null) {
        mHiLayerResponse = extras.getByteArray(EXTRA_HI_LAYER_RESP);
        mHistBytes = extras.getByteArray(EXTRA_HIST_BYTES);
    }
}
 
源代码16 项目: android_9.0.0_r45   文件: NfcF.java
/** @hide */
public NfcF(Tag tag) throws RemoteException {
    super(tag, TagTechnology.NFC_F);
    Bundle extras = tag.getTechExtras(TagTechnology.NFC_F);
    if (extras != null) {
        mSystemCode = extras.getByteArray(EXTRA_SC);
        mManufacturer = extras.getByteArray(EXTRA_PMM);
    }
}
 
源代码17 项目: yubikit-android   文件: NfcDeviceManager.java
/**
 * Sets listener to Nfc session discovery
 * @param listener the listener
 */
public void setListener(final @NonNull NfcSessionListener listener) {
    dispatcher.setOnTagHandler(new NfcDispatcher.OnTagHandler() {
        @Override
        public void onTag(Tag tag) {
            listener.onSessionReceived(new NfcSession(tag));
        }
    });
}
 
源代码18 项目: android-nfc-lib   文件: NfcWriteUtilityImpl.java
/**
 * {@inheritDoc}
 */
@Override
public boolean writeGeolocationToTagFromIntent(Double latitude, Double longitude, @NotNull Intent intent) throws FormatException, ReadOnlyTagException, InsufficientCapacityException, TagNotPresentException {
    final NdefMessage ndefMessage = mNfcMessageUtility.createGeolocation(latitude, longitude);
    final Tag tag = retrieveTagFromIntent(intent);
    return writeToTag(ndefMessage, tag);
}
 
源代码19 项目: yubikit-android   文件: OtpParser.java
/**
 * Parses nfc tag and extracts otp credential from it
 * @param tag an NDEF compatible tag
 * @return OTP data
 * @throws ParseTagException if tag has no NDEF Tag Technology or there is no YK OTP payload
 */
public static @NonNull String parseTag(Tag tag) throws ParseTagException {
    Ndef ndef = Ndef.get(tag);
    if (ndef == null) {
        throw new ParseTagException("Tag is not NDEF formatted");
    }
    NdefMessage message;
    try {
        ndef.connect();
        message = ndef.getNdefMessage();
    } catch (FormatException | IOException e) {
        message = ndef.getCachedNdefMessage();
    } finally {
        try {
            ndef.close();
        } catch (IOException ignore) {
        }
    }

    if (message == null) {
        throw new ParseTagException("Couldn't read ndef message");
    }

    String parsedData = parseNdefMessage(message);
    if (parsedData != null) {
        return parsedData;
    }
    throw new ParseTagException("Tag doesn't have YK OTP payload");
}
 
源代码20 项目: polling-station-app   文件: PassportConnection.java
/**
 * Opens a connection with the ID by doing BAC
 * Uses hardcoded parameters for now
 *
 * @param tag - NFC tag that started this activity (ID NFC tag)
 * @return PassportService - passportservice that has an open connection with the ID
 */
public PassportService openConnection(Tag tag, final DocumentData docData) throws CardServiceException {
    try {
        IsoDep nfc = IsoDep.get(tag);
        CardService cs = CardService.getInstance(nfc);
        this.ps = new PassportService(cs);
        this.ps.open();

        // Get the information needed for BAC from the data provided by OCR
        this.ps.sendSelectApplet(false);
        BACKeySpec bacKey = new BACKeySpec() {
            @Override
            public String getDocumentNumber() {
                return docData.getDocumentNumber();
            }

            @Override
            public String getDateOfBirth() { return docData.getDateOfBirth(); }

            @Override
            public String getDateOfExpiry() { return docData.getExpiryDate(); }
        };
        ps.doBAC(bacKey);
        return ps;
    } catch (CardServiceException ex) {
        try {
            ps.close();
        } catch (Exception ex2) {
            ex2.printStackTrace();
        }
        throw ex;
    }
}
 
源代码21 项目: android-nfc   文件: RunAppActivity.java
@Override
public void onNewIntent(Intent intent) {
    if (mPackageName == null)
        return;
    //1.获取Tag对象
    Tag detectedTag = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG);
    writeNFCTag(detectedTag);
}
 
源代码22 项目: android-nfc   文件: WriteTextActivity.java
@Override
public void onNewIntent(Intent intent) {
    if (mText == null)
        return;
    //获取Tag对象
    Tag detectedTag = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG);
    NdefMessage ndefMessage = new NdefMessage(
            new NdefRecord[]{createTextRecord(mText)});
    boolean result = writeTag(ndefMessage, detectedTag);
    if (result) {
        Toast.makeText(this, "写入成功", Toast.LENGTH_SHORT).show();
    } else {
        Toast.makeText(this, "写入失败", Toast.LENGTH_SHORT).show();
    }
}
 
源代码23 项目: android-nfc   文件: WriteTextActivity.java
/**
 * 写数据
 *
 * @param ndefMessage 创建好的NDEF文本数据
 * @param tag         标签
 * @return
 */
public static boolean writeTag(NdefMessage ndefMessage, Tag tag) {
    try {
        Ndef ndef = Ndef.get(tag);
        ndef.connect();
        ndef.writeNdefMessage(ndefMessage);
        return true;
    } catch (Exception e) {
    }
    return false;
}
 
源代码24 项目: bankomatinfos   文件: NfcBankomatCardReader.java
/**
 * Constructor
 * 
 * @param _nfcTag
 */
public NfcBankomatCardReader(Tag nfcTag, Context ctx) {
	super();
	this._nfcTag = nfcTag;
	this._ctl = AppController.getInstance();
	this._tagList = new ArrayList<TagAndValue>();
	this._ctx = ctx;
}
 
源代码25 项目: android-nfc   文件: WriteUriActivity.java
public void onNewIntent(Intent intent) {
    Tag detectedTag = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG);
    NdefMessage ndefMessage = new NdefMessage(new NdefRecord[]{createUriRecord(mUri)});
    boolean result = writeTag(ndefMessage, detectedTag);
    if (result) {
        Toast.makeText(this, "写入成功", Toast.LENGTH_SHORT).show();
    } else {
        Toast.makeText(this, "写入失败", Toast.LENGTH_SHORT).show();
    }
}
 
源代码26 项目: DeviceConnect-Android   文件: NFCWriterActivity.java
/**
 * NFC に書き込むを確認するダイアログを表示します.
 *
 * @param tag 書き込み先のNFCタグ
 */
private void openWriteTag(final Tag tag) {
    runOnUiThread(() -> new AlertDialog.Builder(NFCWriterActivity.this)
            .setTitle(R.string.activity_nfc_write_dialog_title)
            .setMessage(R.string.activity_nfc_write_dialog_message)
            .setPositiveButton(R.string.activity_nfc_setting_error_btn_ok, (dialogInterface, i) -> {
                try {
                    writeTag(tag);
                    postTagWriterActivityResult(TagConstants.RESULT_SUCCESS);
                } catch (NFCWriteException e) {
                    switch (e.getCode()) {
                        default:
                        case IO_ERROR:
                            postTagWriterActivityResult(TagConstants.RESULT_FAILED);
                            break;
                        case INVALID_FORMAT:
                            postTagWriterActivityResult(TagConstants.RESULT_INVALID_FORMAT);
                            break;
                        case NOT_WRITABLE:
                            postTagWriterActivityResult(TagConstants.RESULT_NOT_WRIATEBLE);
                            break;
                    }
                }
            })
            .setNegativeButton(R.string.activity_nfc_setting_error_btn_cancel, (dialogInterface, i) -> finish())
            .show());
}
 
源代码27 项目: xDrip   文件: NFCReaderX.java
private static synchronized void doTheScan(final Activity context, Tag tag, boolean showui) {
    synchronized (tag_lock) {
        if (!tag_discovered) {
            if (!useNFC()) return;
            if ((!last_read_succeeded) && (JoH.ratelimit("nfc-debounce", 5)) || (JoH.ratelimit("nfc-debounce", 60))) {
                tag_discovered = true;
                Home.staticBlockUI(context, true);
                last_tag_discovered = JoH.tsl();
                if (showui) {
                    context.startActivity(new Intent(context, NFCScanningX.class));
                } else {
                    NFCReaderX.vibrate(context, 0);
                    JoH.static_toast_short(gs(R.string.scanning));
                }
                if (d)
                    Log.d(TAG, "NFC tag discovered - going to read data");
                new NfcVReaderTask(context).executeOnExecutor(xdrip.executor, tag);
            } else {
                if (JoH.tsl() - last_tag_discovered > 5000) {
                    vibrate(context, 4);
                    JoH.static_toast_short(gs(R.string.not_so_quickly_wait_60_seconds));
                }
            }
        } else {
            Log.d(TAG, "Tag already discovered!");
            if (JoH.tsl() - last_tag_discovered > 60000)
                tag_discovered = false; // don't lock too long
        }
    } // lock
}
 
源代码28 项目: xDrip   文件: NFCReaderX.java
public static void tagFound(Activity context, Intent data) {

        if (NfcAdapter.ACTION_TECH_DISCOVERED.equals(data.getAction())) {
            Tag tag = data.getParcelableExtra(NfcAdapter.EXTRA_TAG);
            doTheScan(context, tag, true);
        }
    }
 
源代码29 项目: xDrip   文件: NFCReaderX.java
public static void tagFound(Activity context, Intent data) {

        if (NfcAdapter.ACTION_TECH_DISCOVERED.equals(data.getAction())) {
            Tag tag = data.getParcelableExtra(NfcAdapter.EXTRA_TAG);
            doTheScan(context, tag, true);
        }
    }
 
源代码30 项目: xDrip-plus   文件: NFCReaderX.java
private static synchronized void doTheScan(final Activity context, Tag tag, boolean showui) {
    synchronized (tag_lock) {
        if (!tag_discovered) {
            if (!useNFC()) return;
            if ((!last_read_succeeded) && (JoH.ratelimit("nfc-debounce", 5)) || (JoH.ratelimit("nfc-debounce", 60))) {
                tag_discovered = true;
                Home.staticBlockUI(context, true);
                last_tag_discovered = JoH.tsl();
                if (showui) {
                    context.startActivity(new Intent(context, NFCScanningX.class));
                } else {
                    NFCReaderX.vibrate(context, 0);
                    JoH.static_toast_short(gs(R.string.scanning));
                }
                if (d)
                    Log.d(TAG, "NFC tag discovered - going to read data");
                new NfcVReaderTask(context).executeOnExecutor(xdrip.executor, tag);
            } else {
                if (JoH.tsl() - last_tag_discovered > 5000) {
                    vibrate(context, 4);
                    JoH.static_toast_short(gs(R.string.not_so_quickly_wait_60_seconds));
                }
            }
        } else {
            Log.d(TAG, "Tag already discovered!");
            if (JoH.tsl() - last_tag_discovered > 60000)
                tag_discovered = false; // don't lock too long
        }
    } // lock
}