Notice
Recent Posts
Recent Comments
Link
투케이2K
199. (AndroidStudio/android/java) NFC HCE 카드 에뮬레이터 통신 수행 실시 본문
[개발 환경 설정]
개발 툴 : 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 서비스 주요 로직]
[첨부 파일]
반응형
'Android' 카테고리의 다른 글
Comments