마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

NFC write/read 앱을 개발하고 있는데요~ 보안 관련하여 질문이 있습니다~

0 추천
NFC에 text 타입과 application 타입으로 데이터를 입력하구요~

특정(제가 제작한) 앱에서만 읽고 쓰기를 하고 싶은데요~

application을 저의 앱으로 등록 해두니 앱 실행 안한 상태에서 태깅을 하면

앱이 실행되고 미설치 시엔 마켓으로 이동도 하여 괜찮게 작동 하는데요~

문제는 write 앱으로 태그에 쓰기 시도를 하면 바로 내용이 써져 버립니다..

예를 들어 해당 태그를 공공장소에 비치해 두고 read 태그 시 제 앱을 실행토록 하고 싶고

거기서 뭔가 처리를 하도록 하고 싶은데...

write 앱으로 태그에 대면 다른 내용으로 덮어져 버려 제가 의도한 데이터가 모두 사라져 버립니다..

write도 특정 앱만 가능토록 권한을 부여한다거나...

write가 시도될 때 정의된 비밀번호? 같은걸 요구하게 한다거나... 방법은 상관없습니다.

오로지 제가 제작한 앱에서만 읽기와 특히 쓰기가 가능했으면 좋겠는데...

어떻게 해야하는지 힌트좀 주시면 감사하겠습니다 ㅠ_ㅠ

 

그리고 추가로 앱상에서 read 하는 화면 외에는 태그시 아무 반응이 없도록 하고 싶은데

application 타입의 데이터로 인해 앱이 다시 실행 되더라구요~ 처음엔 중복 실행이 되었는데

메인엑티비티에 android:launchMode="singleInstance" 를 추가하여 중복 실행은 막았는데

이미 실행되어있는상태에서 똑같은 앱이 내려갔다 다시 올라오는 동작을 하는데 이걸 막을 방법은 없을까요...?

당장 생각나는게 모든 엑티비티에 nfcadapter를 달아서 태깅시 아무것도 안하게 처리하는 것 외엔 아이디어가 안 떠오르는데...

뭔가 좀 더 심플한 방법이 있을까 해서요...!

 

답변 미리 감사합니다!
장승제 (760 포인트) 님이 2015년 6월 1일 질문
아래 내용에 대한 답변이 될 거 같은데요. singleInstance를 사용하시는 이유는 앱이 이미 실행되고 있는데도 불구하고, 다른 테스크로 똑같은 앱이 실행된다. 자나요?

그러면 startActivity를 하는 부분이 있을 겁니다.
거기에 Intent로 앱의 시작 Activity가 실행되도록 정의되어 있을 거구요..
Intent intent = new Intent(this, StartActivity.class);

===
요기에 플래그를 추가해 주면 됩니다.
intent.setAction(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_LAUNCHER);
요걸 추가해주면 프로그램 목록에서 앱을 실행하는 것과 같은 효과로, 이미 앱이 실행되어 메모리에 상주하고 있다면, 그 앱을 Forground로 가져와서 화면에 보여줍니다.

startActivity(intent);
아하~ 그런 플래그가 있었군요! 답변 감사합니다!
근데 현재 nfc로 앱이 재실행 되는 상황에서는 제가 startActivity를 호출해 주는것이 아니고 nfc 에 application/패키지명 mimetype으로 홈 화면에서 nfc 태그시 앱이 실행되는 것이라 intent.setAction(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_LAUNCHER); 셋팅이 불가능한데 혹시 nfc에 application 을 지정해줄 때 저러한 flag를 줄 방법이 있나요...? 현재는 singleInstance는 사용하지 않고 singleTask 로 사용하고 있긴 합니다...

1개의 답변

0 추천
Ndef에다가

쓰실내용 다 쓰시고

makeReadOnly()호출해주면 읽기 전용으로 락 됩니다.

읽기 전용을 해제하는 방법이 따로 있는지는 모르겠네요...;;;

 

그리고 런치모드를 singleInstance로 사용하는 것은

구글에서 굉장히 강조해서 비추천하는 방식이니

런치모드를 수정하는 것보다 다른 방식을 사용하는 것이 좋겠습니다
파닭칡힌 (1,820 포인트) 님이 2015년 6월 1일 답변
...