URL : http://blog.startnfc.com/2
.....
- NFC를 지원하는 안드로이드 단말. 안드로이드 2.3.3 이상.
- 티머니 혹은 캐시비 교통카드. 혹은 최근 몇 년 이내에 발급받은 신용카드. 혹은 NFC 태그가 있다면 더욱 좋음.
- 안드로이드 애플리케이션 개발 환경. (JDK, Eclipse, Android SDK...)
안드로이드 애플리케이션 프로젝트 생성
.....
AndroidManifest.xml 에 NFC 기능/권한 추가
애플리케이션이 NFC 기능을 사용하기 위해서, AndroidManifest.xml 에 다음과 같이 <uses-feature> 와 <uses-permission> 항목을 추가합니다.
<uses-feature android:name="android.hardware.nfc" required="false" /> <uses-permission android:name="android.permission.NFC" /> |
<uses-feature>는 이 애플리케이션이 NFC 기능을 사용한다는 것을 의미합니다. android:required 속성을 true로 하면 Google Play에서 NFC 기능을 가진 단말에서만 애플리케이션이 보이도록 할 수도 있습니다. <uses-permission>은 애플리케이션이 NFC 접근 권한을 필요로 한다는 의미이고, 애플리케이션 설치 시 사용자에 의해 권한 확인을 받게 됩니다.
NfcAdapter
NFC 단말에 태그가 인식되면, Intent를 통해서 Activity로 전달됩니다. Activity가 이 Intent를 받기 위해서는 NfcAdapter 클래스의 enableForegroundDispatch(..) 를 이용합니다.
public void enableForegroundDispatch(Activity activity, PendingIntent pendingIntent, IntentFilter[] filters, String[][] techLists) |
.....
이 메소드를 호출하기 전에 NfcAdapter 객체와 PendingIntent 객체가 필요하므로, onCreate(..) 에서 이 두 객체를 아래와 같이 생성합니다.
private NfcAdapter nfcAdapter; private PendingIntent pendingIntent; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); nfcAdapter = NfcAdapter.getDefaultAdapter(this); Intent intent = new Intent(this, getClass()).addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP); pendingIntent = PendingIntent.getActivity(this, 0, intent, 0); } |
.....
Intent 객체를 생성할 때 Intent.FLAG_ACTIVITY_SINGLE_TOP 플래그를 준 것은, 태그를 계속 인식할 때 새로운 Activity를 만들지 않고 현재 Activity에서 Intent를 받기 위해서입니다.
Activity가 화면에 보이고 있을 때에만 NFC 태그를 인식하기 위해서, onResume(..)에서 enableForegroundDispatch(..)를 호출하고, onPause(..)에서 disableForegroundDispatch(..)를 호출합니다.
.....
이제 태그가 인식되면 onNewIntent(..)로 Intent가 전달될 것입니다. onNewIntent(..)에서는 이 Intent가 태그 인식으로 인한 Intent인지를 판단하고, 태그 ID를 화면에 출력합니다.
@Override protected void onNewIntent(Intent intent) { super.onNewIntent(intent); Tag tag = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG); if (tag != null) { byte[] tagId = tag.getId(); tagDesc.setText("TagID: " + toHexString(tagId)); } } |
NFC 태그 인식으로 발생한 intent에는 NfcAdapter.EXTRA_TAG 이름으로 Tag 객체가 전달됩니다. 이것을 확인하면 NFC 태그 인식으로 인한 intent인지 확인할 수 있습니다.
Tag 의 getId() 메소드는 byte[] 형식의 태그 ID를 리턴합니다. toHexString(..) 메소드는 byte[]를 String으로 변환하는 역할을 하는데, 소스는 전체 소스코드에서 확인할 수 있습니다.
.....
'Programming > Android Java' 카테고리의 다른 글
소켓 통신시 한글 전송할 때 깨짐 현상 해결 방법 (0) | 2014.08.11 |
---|---|
소켓 통신에서 InputStream / OutputStream을 열 때 멈추는 현상 (0) | 2014.08.11 |
Android Intent MIME Type (0) | 2014.08.10 |
TLS / SSL (보안소켓) 구현 in Android (1) (0) | 2014.08.10 |
pc간의 ssl 보안소켓통신 (0) | 2014.08.10 |