NFC 태그 프론트 데스크 배포 및 데이터 읽 기
@xml/nfc_tech_filter 파일, 이 파일 은 응용 프로그램 이 지원 하 는 NFC 기술 목록 입 니 다.
android.nfc.tech.MifareClassic
홈 페이지 문서 가 지원 하 는 모든 기술 목록 은 다음 과 같 습 니 다.
android.nfc.tech.IsoDep
android.nfc.tech.NfcA
android.nfc.tech.NfcB
android.nfc.tech.NfcF
android.nfc.tech.NfcV
android.nfc.tech.Ndef
android.nfc.tech.NdefFormatable
android.nfc.tech.MifareClassic
android.nfc.tech.MifareUltralight
홈 페이지 설명 에 따 르 면 라벨 배포 차단 은 다음 과 같은 절차 가 있 습 니 다. 1. onCreate 방법 에서 전체적인 PendingIntent 대상 을 만 들 고 NFC 탭 을 스 캔 할 때 시스템 은 스 캔 한 tag 정보 로 이 pendingIntent 대상 을 채 울 수 있 습 니 다.코드 는 다음 과 같 습 니 다:
pendingIntent = PendingIntent.getActivity(this, 0, new Intent(this, getClass()).addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP), 0);
2. 차단 할 intent 필 터 를 정의 합 니 다.장치 가 탭 을 검색 할 때 시스템 프론트 데스크 톱 배포 시스템 은 받 은 intent 에 따라 우리 가 지정 한 intent Filter 에 부합 되 는 지 확인 합 니 다.일치 하면 프로그램 이 이 intent 를 처리 합 니 다. 그렇지 않 으 면 시스템 intent 배포 시스템 을 호출 합 니 다.intent 필터 와 기술 필터 배열 이 비어 있 으 면 TAG 를 받 을 수 있 습 니 다.DISCOVERED 에 있 는 모든 태그.(즉, 시스템 태그 배포 시스템 을 우리 프론트 데스크 톱 Activity 로 차단 하려 면 차단 한 intent 필터, 우리 가 처리 해 야 할 기술 필터 배열 을 정의 해 야 합 니 다) 시스템 예제 코드 는 다음 과 같 습 니 다.
IntentFilter ndef = new IntentFilter(NfcAdapter.ACTION_NDEF_DISCOVERED);
try {
ndef.addDataType("*/*"); /* Handles all MIME based dispatches.
You should specify only the ones that you need. */
}
catch (MalformedMimeTypeException e) {
throw new RuntimeException("fail", e);
}
intentFiltersArray = new IntentFilter[] {ndef, };
내 가 테스트 하 는 과정 에서 mime 형식 을 사용 하지 않 았 다.
techListsArray = new String[][]{new String[]{MifareClassic.class.getName()}};//
IntentFilter ndef = new IntentFilter();
ndef.addAction(NfcAdapter.ACTION_NDEF_DISCOVERED);//
intentFiltersArray = new IntentFilter[]{ndef};
3. 복사 시스템 방법
@Override
protected void onNewIntent(Intent intent) {
processIntent(intent);// , intent
}
@Override
protected void onPause() {
super.onPause();
nfcAdapter.disableForegroundDispatch(this);
}
@Override
protected void onResume() {
super.onResume();
nfcAdapter.enableForegroundDispatch(this, pendingIntent, intentFiltersArray, techListsArray);
if (getIntent().getAction() != null) {
if (NfcAdapter.ACTION_TECH_DISCOVERED.endsWith(getIntent().getAction())) {
processIntent(getIntent());
}
}
}
이 가운데 onResume 방법의 if 판단 은 프로그램 이 실행 되 지 않 았 을 때 NFC 탭 을 스 캔 해도 데 이 터 를 받 을 수 있 도록 하 는 것 이다.
그 다음 에 중요 한 것 은 데이터 읽 기와 쓰기 입 니 다. 여 기 는 간단 한 조작 일 뿐 구체 적 으로 는 공식 문 서 를 참고 해 야 합 니 다.
// block
private void readData(final MifareClassic mfc) {
if (mfc != null) {
if (mfc.isConnected()) {
try {
String result = "";
tvStatus.setText(" ");
for (int i = 0; i < mfc.getSectorCount(); i++) {//
int bindex;
int bCount;
if (mfc.authenticateSectorWithKeyA(i, MifareClassic.KEY_DEFAULT)) {// key,
bindex = mfc.sectorToBlock(i);
bCount = mfc.getBlockCountInSector(i);
result += "Sector " + i + "
";
for (int j = 0; j < bCount; j++) {// , key, ,
byte[] data = mfc.readBlock(bindex);
result += "Block " + bindex + " : " + new String(data, Charset.forName("UTF-8")) + "
";
bindex++;
}
}
}
tvStatus.setText(" ");
tvReadData.setText(result);
} catch (Exception ex) {
tvStatus.setText(" :" + ex.getMessage());
}
}
} else {
Toast.makeText(this, " NFC", Toast.LENGTH_SHORT).show();
}
}
// block
private void writeData(final MifareClassic mfc, final int blockIndex, String msg) {
if (mfc != null) {
try {
Log.e(TAG, "writeData: isConnected:" + mfc.isConnected());
if (mfc.isConnected()) {
byte[] temp = msg.getBytes(Charset.forName("UTF-8"));
final byte[] write = new byte[MifareClassic.BLOCK_SIZE];//
for (int i = 0; i < MifareClassic.BLOCK_SIZE; i++) {
if (i < temp.length)
write[i] = temp[i];
else
write[i] = 0;
}
tvStatus.setText(" ");
new Thread(new Runnable() {
@Override
public void run() {
try {
Log.e(TAG, "run: :" + new String(write));
mfc.writeBlock(blockIndex, write);// , UI
runOnUiThread(new Runnable() {
@Override
public void run() {
tvStatus.setText(" ");
}
});
} catch (final Exception ex) {
Log.e(TAG, "writeData_Ex: " + ex.getMessage());
runOnUiThread(new Runnable() {
@Override
public void run() {
tvStatus.setText(" :" + ex.getMessage());
}
});
}
}
}).start();
} else {
Toast.makeText(this, "NFC ", Toast.LENGTH_SHORT).show();
}
} catch (Exception ex) {
Log.e(TAG, "writeData: " + ex.getMessage());
}
} else {
Toast.makeText(this, " NFC ", Toast.LENGTH_SHORT).show();
}
}
NFCWRDemo PS: 잘 못 썼 습 니 다. 기록 만 있 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.