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

nfc 에서 어떻게하면 앱이실행되면서 태그를 읽을수있을까요?

+1 추천

nfc 태그를 읽을려구합니다

onResume() 에서 enableForegroundDispatch 를 호출했구여

태그를 폰에대면 잘 읽습니다

 

근데 제가원하는것은

앱이 실행되지않은상태에서 태그를 갖다대면

앱이 실행되면서 태그를 읽도록하고싶습니다

그래서 태그에 Android Application Record (AAR) 레코드도 추가해줚구여

 

앱이실행되지않은상태에서 태그를 갖다대면

앱이 실행은되는데 태그를 읽지를못합니다

실행된상태에서 다시 태그를 갖다대면 그때는 읽어집니다다

 

어떻게하면 앱이실행되면서 태그를 읽을수있을까요?

잡부 (5,110 포인트) 님이 2015년 3월 30일 질문
액션주고 리시버로 받아서 리시버에서 처리하는 방법은 생각해보셧나요~?
"액션주고 리시버로 받아서 "
어떻게하는건지 가르침부탁드립니다

1개의 답변

+1 추천
 
채택된 답변
nfc 칩 mime에 해당 앱에서만 사용할 key를 넣고, 해당키를 메니페스트의 인텐트 필터에 정의해 주시면

안드로이드 OS에서 nfc를 인식할때 해당 activity를 바로 띄워 줄게요. onCreate와 onIntent에서 적절하게 처리해 주시면 됩니다.
이드로이드 (22,930 포인트) 님이 2015년 3월 30일 답변
잡부님이 2015년 3월 30일 채택됨
"nfc 칩 mime에 해당 앱에서만 사용할 key를 넣고"
이게 무슨뜻인지 이해를못했습니다

<intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
            <intent-filter>
                <action android:name="android.nfc.action.NDEF_DISCOVERED"/>
                <category android:name="android.intent.category.DEFAULT"/>
                <data android:mimeType="application/com.sample.beam"/>
            </intent-filter>
메니페스트에서는 위의필터를 넣어줫구여
ndef 레코드에 aar 레코드도 넣어줬습니다
nfc 태그에 값을 입력할때 mimetype를 입력하세요.
그리고 메니페스트에도 위코드의 sample.beram이라고 되어있는것처럼 해당 값을 하나더 추가해주시구요.
그럼 해당 mimeType가 입력된 태그를 안드로이드 os가 인식하면 자동으로 해당 Activity를 실행시킵니다.

요 내용은 nfc태그의 내용도 직접 쓴다는 가정하에 가능한 이야기이고,

nfc태그를 직접 만드시는게 아니라 범용적으로 쓰이는 이미 값이 들어간 태그들을 인식하는거라면 앱이 종료된 상태에서 태그가 인식될때 직접 구현한 앱을 바로 띄우는건 현실적으로 힘듭니다. nfc구현된 앱들 리스트가 뜨고 사용자가 선택한 후에 해당 앱이 실행됩니다. 링크를 눌렀을때 브라우저 선택하는거라던지, 이미지를 열때 이미지 뷰어를 선택한다던지 하는것처럼요.
아.. 제가 본문을 잘못본거 같네요.
앱은 실행이 잘 되고 있는거네요.
onCreate에서 처리해 주시면 됩니다.
앱이 실행된 상태에서도 activity를 singleTop 플러그로 지정해 두면 태그 접촉시 onNewIntent가 호출되서 굳이 onResume에서 enable시킨다던지 하지 않으셔도 됩니다.. 이건 천천히 고민해 보세요.

onCrate에서 요렇게 하시면 됩니다..

Intent intent = getIntent();
if (NfcAdapter.ACTION_NDEF_DISCOVERED.equals(intent.getAction())) {
    NdefMessage ndefMessage = null;
    Parcelable[] rawMessages = intent.getParcelableArrayExtra(NfcAdapter.EXTRA_NDEF_MESSAGES);
    if ((rawMessages != null) && (rawMessages.length > 0)) {
        ndefMessage = (NdefMessage)rawMessages[0];
    }

    // TODO: do something with the received NDEF message
}
이제 mimetype 이뭔지 이해했습니다
하나더 질문드립니다
태그는 읽어지는데
빔전송에서 전송받는폰에서 읽어지지가 않는데
어디를 살펴봐야될까요?
...