18f862ef9f74f2d2ebf767c645ce39db8412dd08fMartijn Coenen/* 28f862ef9f74f2d2ebf767c645ce39db8412dd08fMartijn Coenen * Copyright (C) 2012 The Android Open Source Project 38f862ef9f74f2d2ebf767c645ce39db8412dd08fMartijn Coenen * 48f862ef9f74f2d2ebf767c645ce39db8412dd08fMartijn Coenen * Licensed under the Apache License, Version 2.0 (the "License"); 58f862ef9f74f2d2ebf767c645ce39db8412dd08fMartijn Coenen * you may not use this file except in compliance with the License. 68f862ef9f74f2d2ebf767c645ce39db8412dd08fMartijn Coenen * You may obtain a copy of the License at 78f862ef9f74f2d2ebf767c645ce39db8412dd08fMartijn Coenen * 88f862ef9f74f2d2ebf767c645ce39db8412dd08fMartijn Coenen * http://www.apache.org/licenses/LICENSE-2.0 98f862ef9f74f2d2ebf767c645ce39db8412dd08fMartijn Coenen * 108f862ef9f74f2d2ebf767c645ce39db8412dd08fMartijn Coenen * Unless required by applicable law or agreed to in writing, software 118f862ef9f74f2d2ebf767c645ce39db8412dd08fMartijn Coenen * distributed under the License is distributed on an "AS IS" BASIS, 128f862ef9f74f2d2ebf767c645ce39db8412dd08fMartijn Coenen * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 138f862ef9f74f2d2ebf767c645ce39db8412dd08fMartijn Coenen * See the License for the specific language governing permissions and 148f862ef9f74f2d2ebf767c645ce39db8412dd08fMartijn Coenen * limitations under the License. 158f862ef9f74f2d2ebf767c645ce39db8412dd08fMartijn Coenen */ 168f862ef9f74f2d2ebf767c645ce39db8412dd08fMartijn Coenen 178f862ef9f74f2d2ebf767c645ce39db8412dd08fMartijn Coenenpackage android.nfc.tech; 188f862ef9f74f2d2ebf767c645ce39db8412dd08fMartijn Coenen 198f862ef9f74f2d2ebf767c645ce39db8412dd08fMartijn Coenenimport android.nfc.Tag; 208f862ef9f74f2d2ebf767c645ce39db8412dd08fMartijn Coenenimport android.os.Bundle; 218f862ef9f74f2d2ebf767c645ce39db8412dd08fMartijn Coenenimport android.os.RemoteException; 228f862ef9f74f2d2ebf767c645ce39db8412dd08fMartijn Coenen 238f862ef9f74f2d2ebf767c645ce39db8412dd08fMartijn Coenen/** 248f862ef9f74f2d2ebf767c645ce39db8412dd08fMartijn Coenen * Provides access to tags containing just a barcode. 258f862ef9f74f2d2ebf767c645ce39db8412dd08fMartijn Coenen * 268f862ef9f74f2d2ebf767c645ce39db8412dd08fMartijn Coenen * <p>Acquire an {@link NfcBarcode} object using {@link #get}. 278f862ef9f74f2d2ebf767c645ce39db8412dd08fMartijn Coenen * 288f862ef9f74f2d2ebf767c645ce39db8412dd08fMartijn Coenen */ 298f862ef9f74f2d2ebf767c645ce39db8412dd08fMartijn Coenenpublic final class NfcBarcode extends BasicTagTechnology { 308f862ef9f74f2d2ebf767c645ce39db8412dd08fMartijn Coenen 318f862ef9f74f2d2ebf767c645ce39db8412dd08fMartijn Coenen /** Kovio Tags */ 328f862ef9f74f2d2ebf767c645ce39db8412dd08fMartijn Coenen public static final int TYPE_KOVIO = 1; 338f862ef9f74f2d2ebf767c645ce39db8412dd08fMartijn Coenen public static final int TYPE_UNKNOWN = -1; 348f862ef9f74f2d2ebf767c645ce39db8412dd08fMartijn Coenen 358f862ef9f74f2d2ebf767c645ce39db8412dd08fMartijn Coenen /** @hide */ 368f862ef9f74f2d2ebf767c645ce39db8412dd08fMartijn Coenen public static final String EXTRA_BARCODE_TYPE = "barcodetype"; 378f862ef9f74f2d2ebf767c645ce39db8412dd08fMartijn Coenen 388f862ef9f74f2d2ebf767c645ce39db8412dd08fMartijn Coenen private int mType; 398f862ef9f74f2d2ebf767c645ce39db8412dd08fMartijn Coenen 408f862ef9f74f2d2ebf767c645ce39db8412dd08fMartijn Coenen /** 418f862ef9f74f2d2ebf767c645ce39db8412dd08fMartijn Coenen * Get an instance of {@link NfcBarcode} for the given tag. 428f862ef9f74f2d2ebf767c645ce39db8412dd08fMartijn Coenen * 438f862ef9f74f2d2ebf767c645ce39db8412dd08fMartijn Coenen * <p>Returns null if {@link NfcBarcode} was not enumerated in {@link Tag#getTechList}. 448f862ef9f74f2d2ebf767c645ce39db8412dd08fMartijn Coenen * 458f862ef9f74f2d2ebf767c645ce39db8412dd08fMartijn Coenen * <p>Does not cause any RF activity and does not block. 468f862ef9f74f2d2ebf767c645ce39db8412dd08fMartijn Coenen * 478f862ef9f74f2d2ebf767c645ce39db8412dd08fMartijn Coenen * @param tag an NfcBarcode compatible tag 488f862ef9f74f2d2ebf767c645ce39db8412dd08fMartijn Coenen * @return NfcBarcode object 498f862ef9f74f2d2ebf767c645ce39db8412dd08fMartijn Coenen */ 508f862ef9f74f2d2ebf767c645ce39db8412dd08fMartijn Coenen public static NfcBarcode get(Tag tag) { 518f862ef9f74f2d2ebf767c645ce39db8412dd08fMartijn Coenen if (!tag.hasTech(TagTechnology.NFC_BARCODE)) return null; 528f862ef9f74f2d2ebf767c645ce39db8412dd08fMartijn Coenen try { 538f862ef9f74f2d2ebf767c645ce39db8412dd08fMartijn Coenen return new NfcBarcode(tag); 548f862ef9f74f2d2ebf767c645ce39db8412dd08fMartijn Coenen } catch (RemoteException e) { 558f862ef9f74f2d2ebf767c645ce39db8412dd08fMartijn Coenen return null; 568f862ef9f74f2d2ebf767c645ce39db8412dd08fMartijn Coenen } 578f862ef9f74f2d2ebf767c645ce39db8412dd08fMartijn Coenen } 588f862ef9f74f2d2ebf767c645ce39db8412dd08fMartijn Coenen 598f862ef9f74f2d2ebf767c645ce39db8412dd08fMartijn Coenen /** 608f862ef9f74f2d2ebf767c645ce39db8412dd08fMartijn Coenen * Internal constructor, to be used by NfcAdapter 618f862ef9f74f2d2ebf767c645ce39db8412dd08fMartijn Coenen * @hide 628f862ef9f74f2d2ebf767c645ce39db8412dd08fMartijn Coenen */ 638f862ef9f74f2d2ebf767c645ce39db8412dd08fMartijn Coenen public NfcBarcode(Tag tag) throws RemoteException { 648f862ef9f74f2d2ebf767c645ce39db8412dd08fMartijn Coenen super(tag, TagTechnology.NFC_BARCODE); 658f862ef9f74f2d2ebf767c645ce39db8412dd08fMartijn Coenen Bundle extras = tag.getTechExtras(TagTechnology.NFC_BARCODE); 668f862ef9f74f2d2ebf767c645ce39db8412dd08fMartijn Coenen if (extras != null) { 678f862ef9f74f2d2ebf767c645ce39db8412dd08fMartijn Coenen mType = extras.getInt(EXTRA_BARCODE_TYPE); 688f862ef9f74f2d2ebf767c645ce39db8412dd08fMartijn Coenen } else { 698f862ef9f74f2d2ebf767c645ce39db8412dd08fMartijn Coenen throw new NullPointerException("NfcBarcode tech extras are null."); 708f862ef9f74f2d2ebf767c645ce39db8412dd08fMartijn Coenen } 718f862ef9f74f2d2ebf767c645ce39db8412dd08fMartijn Coenen } 728f862ef9f74f2d2ebf767c645ce39db8412dd08fMartijn Coenen 738f862ef9f74f2d2ebf767c645ce39db8412dd08fMartijn Coenen /** 748f862ef9f74f2d2ebf767c645ce39db8412dd08fMartijn Coenen * Returns the NFC Barcode tag type. 758f862ef9f74f2d2ebf767c645ce39db8412dd08fMartijn Coenen * 76f8538594fe6ba6db3310da042597840601d78cdaMartijn Coenen * <p>Currently only one of {@link #TYPE_KOVIO} or {@link #TYPE_UNKNOWN}. 778f862ef9f74f2d2ebf767c645ce39db8412dd08fMartijn Coenen * 788f862ef9f74f2d2ebf767c645ce39db8412dd08fMartijn Coenen * <p>Does not cause any RF activity and does not block. 798f862ef9f74f2d2ebf767c645ce39db8412dd08fMartijn Coenen * 808f862ef9f74f2d2ebf767c645ce39db8412dd08fMartijn Coenen * @return the NFC Barcode tag type 818f862ef9f74f2d2ebf767c645ce39db8412dd08fMartijn Coenen */ 828f862ef9f74f2d2ebf767c645ce39db8412dd08fMartijn Coenen public int getType() { 838f862ef9f74f2d2ebf767c645ce39db8412dd08fMartijn Coenen return mType; 848f862ef9f74f2d2ebf767c645ce39db8412dd08fMartijn Coenen } 858f862ef9f74f2d2ebf767c645ce39db8412dd08fMartijn Coenen 868f862ef9f74f2d2ebf767c645ce39db8412dd08fMartijn Coenen /** 878f862ef9f74f2d2ebf767c645ce39db8412dd08fMartijn Coenen * Returns the barcode of an NfcBarcode tag. 888f862ef9f74f2d2ebf767c645ce39db8412dd08fMartijn Coenen * 898f862ef9f74f2d2ebf767c645ce39db8412dd08fMartijn Coenen * <p>Does not cause any RF activity and does not block. 908f862ef9f74f2d2ebf767c645ce39db8412dd08fMartijn Coenen * 918f862ef9f74f2d2ebf767c645ce39db8412dd08fMartijn Coenen * @return a byte array containing the barcode 928f862ef9f74f2d2ebf767c645ce39db8412dd08fMartijn Coenen */ 938f862ef9f74f2d2ebf767c645ce39db8412dd08fMartijn Coenen public byte[] getBarcode() { 948f862ef9f74f2d2ebf767c645ce39db8412dd08fMartijn Coenen switch (mType) { 958f862ef9f74f2d2ebf767c645ce39db8412dd08fMartijn Coenen case TYPE_KOVIO: 968f862ef9f74f2d2ebf767c645ce39db8412dd08fMartijn Coenen // For Kovio tags the barcode matches the ID 978f862ef9f74f2d2ebf767c645ce39db8412dd08fMartijn Coenen return mTag.getId(); 988f862ef9f74f2d2ebf767c645ce39db8412dd08fMartijn Coenen default: 998f862ef9f74f2d2ebf767c645ce39db8412dd08fMartijn Coenen return null; 1008f862ef9f74f2d2ebf767c645ce39db8412dd08fMartijn Coenen } 1018f862ef9f74f2d2ebf767c645ce39db8412dd08fMartijn Coenen } 1028f862ef9f74f2d2ebf767c645ce39db8412dd08fMartijn Coenen} 103