투케이2K

199. (AndroidStudio/android/java) NFC HCE 카드 에뮬레이터 통신 수행 실시 본문

Android

199. (AndroidStudio/android/java) NFC HCE 카드 에뮬레이터 통신 수행 실시

투케이2K 2021. 10. 4. 11:09

[개발 환경 설정]

개발 툴 : AndroidStudio

개발 언어 : java


[요약 소스코드]

/** [액티비티 실행 준비 메소드] **/
@Override
public void onResume(){
	super.onResume();
	Log.d("---","---");
	Log.d("//===========//","================================================");
	Log.d("","\n"+"[A_Nfc > onResume() 메소드 : 액티비티 실행 준비]");
	Log.d("//===========//","================================================");
	Log.d("---","---");
	//TODO [NFC 지원 여부 및 활성 상태 확인 >> 서비스 호출]
	try {
		// [0 = NFC 지원안하는 기기 / 1 = NFC 지원 및 기능 비활성 상태 / 2 = NFC 지원 및 기능 활성 상태]
		if(getNfcEnable() == 2){
			Toast.makeText(getApplication(), "NFC 동작을 수행합니다.",Toast.LENGTH_SHORT).show();
			//TODO [NFC HCE 통신 지원 서비스 호출]
			Intent A_Nfc_Service = new Intent(getApplication(), A_Nfc_Service.class);
			A_Nfc_Service.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
			startService(A_Nfc_Service);
			overridePendingTransition(0,0);
		}
	}
	catch (Exception e){
		e.printStackTrace();
	}
}





/** [NFC 활성 상태 확인 코드] **/
public int getNfcEnable(){
	// AndroidManifest.xml 파일 퍼미션
	// <uses-permission android:name="android.permission.NFC"/>
	// 리턴 결과 변수 선언 실시
	// [0 = NFC 지원안하는 기기 / 1 = NFC 지원 및 기능 비활성 상태 / 2 = NFC 지원 및 기능 활성 상태]
	int result = 0;

	// NFC 활성 상태 확인 실시
	try {
		NfcAdapter nfcAdapter = null;
		nfcAdapter = NfcAdapter.getDefaultAdapter(getApplication());
		if(nfcAdapter == null){ //TODO NFC를 지원하지 않는 기기인지 확인
			Log.d("---","---");
			Log.e("//===========//","================================================");
			Log.d("","\n"+"[A_Nfc > NFC 지원 기기 확인 : 지원하지 않는 모바일 기기]");
			Log.e("//===========//","================================================");
			Log.d("---","---");
			result = 0;
			//TODO [Alert 팝업창 알림 실시]
			getAlertDialog("[알림]",
					"NFC 기능을 지원하지 않는 단말기입니다.",
					"확인", "취소", "");
		}
		else { //TODO NFC가 켜져있는지 확인 [NFC 지원 기기]
			Log.d("---","---");
			Log.w("//===========//","================================================");
			Log.d("","\n"+"[A_Nfc > NFC 지원 기기 확인 : 지원하는 모바일 기기]");
			Log.w("//===========//","================================================");
			Log.d("---","---");
			if(nfcAdapter.isEnabled() == true){
				Log.d("---","---");
				Log.w("//===========//","================================================");
				Log.d("","\n"+"[A_Nfc > NFC 기능 활성 확인 : 활성 상태]");
				Log.w("//===========//","================================================");
				Log.d("---","---");
				result = 2;
			}
			else {
				Log.d("---","---");
				Log.e("//===========//","================================================");
				Log.d("","\n"+"[A_Nfc > NFC 기능 활성 확인 : 비활성 상태]");
				Log.e("//===========//","================================================");
				Log.d("---","---");
				result = 1;
				//TODO [Alert 팝업창 알림 실시]
				getAlertDialog("[알림]",
						"NFC 기능이 비활성 상태입니다.\nNFC 기본 모드를 활성화해주세요.",
						"설정", "취소", "");
			}
		}
	}
	catch (Exception e){
		e.printStackTrace();
	}
	// 결과 리턴 실시
	return result;
}





/** [Alert 팝업창 호출 메소드 정의] **/
public void getAlertDialog(String header, String content, String ok, String no, String normal){
	//TODO [타이틀 및 내용 표시]
	final String Tittle = String.valueOf(header);
	final String Message = String.valueOf(content);

	//TODO [버튼 이름 정의]
	String buttonYes = String.valueOf(ok);
	String buttonNo = String.valueOf(no);
	String buttonNature = String.valueOf(normal);

	try {
		//TODO [AlertDialog 팝업창 생성]
		new AlertDialog.Builder(A_Nfc.this)
				.setTitle(Tittle) //[팝업창 타이틀 지정]
				//.setIcon(R.drawable.tk_app_icon) //[팝업창 아이콘 지정]
				.setMessage(Message) //[팝업창 내용 지정]
				.setCancelable(false) //[외부 레이아웃 클릭시도 팝업창이 사라지지않게 설정]
				.setPositiveButton(buttonYes, new DialogInterface.OnClickListener() {
					@Override
					public void onClick(DialogInterface dialog, int which) {
						// TODO Auto-generated method stub
						if(Message.contains("NFC") && Message.contains("비활성")){
							//TODO [NFC 설정 인텐트 이동 실시]
							Intent intent = new Intent(Settings.ACTION_NFC_SETTINGS);
							intent.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
							startActivity(intent);
							overridePendingTransition(0, 0);
						}
					}
				})
				.setNegativeButton(buttonNo, new DialogInterface.OnClickListener() {
					@Override
					public void onClick(DialogInterface dialog, int which) {
						// TODO Auto-generated method stub
					}
				})
				.setNeutralButton(buttonNature, new DialogInterface.OnClickListener() {
					@Override
					public void onClick(DialogInterface dialog, int which) {
						// TODO Auto-generated method stub
					}
				})
				.show();
	}
	catch (Exception e){
		Toast.makeText(getApplicationContext(), Tittle+"\n"+Message,Toast.LENGTH_SHORT).show();
		e.printStackTrace();
	}
}

[NFC HCE 서비스 주요 로직]


[첨부 파일]

 

nfc hce 통신 소스 코드.txt
0.02MB


 

반응형
Comments