2011-04-05 163 views

回答

15

NDEF Tools for Android公用事業項目有助於執行以下操作

  1. Detect,然後
  2. Readwrite,或
  3. Beam(推) NFC內容

該項目還包含所有標準化NDEF記錄類型的數據綁定,與使用Android SDK中包含的(基於字節數組的)NDEF類相比,它真正簡化了一些事情。

另請參見NFC Eclipse plugin圖形NDEF編輯器 - 附帶實用程序app,它可以讀取和寫入標籤和光束,還具有NFC讀卡器集成功能。

順便說一句,你正在尋找Android應用程序記錄啓動應用程序。推出的'功能'不需要任何實際的實施;它內置於Android> = 4.0中,因此將該記錄放置在標籤上就足夠了。

編輯:更新鏈接

+0

我在NFC閱讀和寫作讀書了,我正要刪除蝕去了ADT,將在NFC -eclipse-plugin兼容/可用? YouTube教程看起來很乾淨 – alex 2015-04-15 09:54:33

+0

對不起,我的意思是Android Studio – alex 2015-04-15 10:06:02

+0

這看起來很有前途。但是,我們是否可以在同一活動中閱讀和書寫? – 2015-04-28 18:07:49

11

首先,你必須獲得針對NFC AndroidManifest.xml文件的權限。權限是:

  <intent-filter> 
      <action android:name="android.nfc.action.TAG_DISCOVERED" /> 

      <category android:name="android.intent.category.DEFAULT" /> 
     </intent-filter> 

在您的活動onCreate()方法你:

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

將執行NFC讀/寫操作的行爲,該活動在AndroidManifest.xml文件中添加此意圖過濾器必須初始化NFC適配器和定義待定意圖:

NfcAdapter mAdapter; 
PendingIntent mPendingIntent; 
mAdapter = NfcAdapter.getDefaultAdapter(this); 
if (mAdapter == null) { 
    //nfc not support your device. 
    return; 
} 
mPendingIntent = PendingIntent.getActivity(this, 0, new Intent(this, 
     getClass()).addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP), 0); 

在的onResume()回撥使前景調度來檢測NFC意圖。

mAdapter.enableForegroundDispatch(this, mPendingIntent, null, null); 

在的onPause()回調您必須禁用於地面調度:

if (mAdapter != null) { 
     mAdapter.disableForegroundDispatch(this); 
    } 

在onNewIntent()回調方法,你會得到新的NFC意向。得到意向後,你必須解析檢測卡的意圖:

@Override 
protected void onNewIntent(Intent intent){  
    getTagInfo(intent) 
} 

private void getTagInfo(Intent intent) { 
    Tag tag = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG); 
} 

現在你有標籤。然後,您可以檢查標籤技術列表以檢測該標籤。標籤檢測技術是在這裏My Another Answer 全面完整的項目是在這裏My github profile

+0

卡里姆先生,我想創建自己的數字名片,請讓我知道我需要購買哪張nfc貼紙? – Sun 2015-03-10 11:40:29

+0

您可以使用Mifare Classic 1k。它有巨大的內存(1024字節),每個塊可以一次寫入16個字節。您也可以鎖定數據以防止進一步寫入。 – 2015-03-10 15:35:59

2

首先是把這些在你的清單:

<uses-permission android:name="android.permission.NFC" /> 
    <uses-permission android:name="android.permission.INTERNET" /> 

,然後把它放進你想讀NFC你的活動:

<intent-filter> 
       <action android:name="android.nfc.action.TAG_DISCOVERED" /> 
       <category android:name="android.intent.category.DEFAULT" /> 
      </intent-filter> 

末增加前進喜歡我的活動:

/**版權所有(C)2010 Android開源項目項目 *版權所有(C)2011 AdamNybäck * *根據Apache許可證2.0版(「許可證」)獲得許可; *除遵守許可證外,您不得使用此文件。 *您可以在獲得許可證的副本 * * http://www.apache.org/licenses/LICENSE-2.0 * *除非適用法律要求或書面同意,根據許可證分發的軟件 *分佈在「原樣」的基礎, *沒有任何形式的保證或條件,無論是明示還是暗示。 *請參閱許可證以瞭解許可證下的特定語言管理權限和 *限制。 */

package ***.***.***.***; 

import android.app.Activity; 
import android.app.PendingIntent; 
import android.content.Context; 
import android.content.Intent; 
import android.graphics.Color; 
import android.graphics.drawable.AnimationDrawable; 
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 android.os.Parcelable; 
import android.support.v4.view.ViewPager; 
import android.support.v7.app.AppCompatActivity; 
import android.support.v7.widget.Toolbar; 
import android.util.Log; 
import android.view.View; 
import android.widget.ImageView; 
import android.widget.TextView; 
import android.widget.Toast; 

import com.balysv.materialripple.MaterialRippleLayout; 
import com.blogspot.android_er.androidnfctagdiscovered.R; 
import com.pixelcan.inkpageindicator.InkPageIndicator; 

import hpbyp.ir.app.hojre.fragment.slider.SliderPagerAdapter; 
import hpbyp.ir.app.hojre.utiles.G; 
import uk.co.chrisjenx.calligraphy.CalligraphyContextWrapper; 

/** 
* An {@link Activity} which handles a broadcast of a new tag that the device just discovered. 
*/ 
public class ActivityLoadDataFromNFC extends AppCompatActivity { 
    @Override 
    protected void attachBaseContext(Context newBase) { 
     super.attachBaseContext(CalligraphyContextWrapper.wrap(newBase)); 
    } 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_load_data_from_nfc); 
     Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
     setSupportActionBar(toolbar); 

     mAdapter = NfcAdapter.getDefaultAdapter(this); 
     if (mAdapter == null) { 
      //nfc not support your device. 
      return; 
     } 
     mPendingIntent = PendingIntent.getActivity(this, 0, new Intent(this, 
       getClass()).addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP), 0); 

    } 

    NfcAdapter mAdapter; 
    PendingIntent mPendingIntent; 

    @Override 
    protected void onResume() { 
     super.onResume(); 
     mAdapter.enableForegroundDispatch(this, mPendingIntent, null, null); 

    } 

    @Override 
    protected void onPause() { 
     super.onPause(); 
     if (mAdapter != null) { 
      mAdapter.disableForegroundDispatch(this); 
     } 
    } 

    @Override 
    protected void onNewIntent(Intent intent) { 
     Tag tag = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG); 
     GetDataFromTag(tag, intent); 

    } 

    private void GetDataFromTag(Tag tag, Intent intent) { 
     Ndef ndef = Ndef.get(tag); 
     try { 
      ndef.connect(); 
//   txtType.setText(ndef.getType().toString()); 
//   txtSize.setText(String.valueOf(ndef.getMaxSize())); 
//   txtWrite.setText(ndef.isWritable() ? "True" : "False"); 
      Parcelable[] messages = intent.getParcelableArrayExtra(NfcAdapter.EXTRA_NDEF_MESSAGES); 

      if (messages != null) { 
       NdefMessage[] ndefMessages = new NdefMessage[messages.length]; 
       for (int i = 0; i < messages.length; i++) { 
        ndefMessages[i] = (NdefMessage) messages[i]; 
       } 
       NdefRecord record = ndefMessages[0].getRecords()[0]; 

       byte[] payload = record.getPayload(); 
       String text = new String(payload); 
       Log.e("tag", "vahid" + text); 
       ndef.close(); 

      } 
     } catch (Exception e) { 
      Toast.makeText(getApplicationContext(), "Cannot Read From Tag.", Toast.LENGTH_LONG).show(); 
     } 
    } 

}