문제

안녕하세요, 삼성 갤럭시 S4가 있습니다.나는 NFC 기반의 안드로이드 앱을 개발하여 앱 (소스 전화)을 실행하는 전화로 단추가 터치 될 때 연락처 (대상 휴대 전화)에 전화기로 전화를 걸 수 있습니다.내 문제는 원본 전화에서 내 앱을 실행하고 원본 전화로 대상 전화를 가져 오면 Samsung의 기본 앱이 시작됩니다 (이 응용 프로그램은 소스 전화의 현재 활동의 스크린 샷을 보여주고 화면을 터치하라는 메시지를 표시합니다.그런 다음 대상 전화에서 동일한 활동을 시작합니다.) 이 문제없이 작동하지 않도록이 작업을 해제하고 싶습니다. 어떻게 이것을 달성합니까?

도움이 되었습니까?

해결책

(또는 1 에 )를 사용하는 경우 빔 UI를 피하기 위해 no 방법이 있습니다 ( 활동의 작은 스크린 샷과 함께 활동).

빔 (빔 UI와 함께)을 적절하게 사용하고 텍스트를 보내려면 2 은 다음을 수행하는 것입니다 :

  1. 대상 장치의 활동에 대한 전경 디스패치 시스템을 사용하므로 수신 된 NDEF 메시지가 앱에서 즉시 처리됩니다. 그런 다음 NDEF 메시지 (또는 활동의 onNewIntent() 메서드에서 NFC 검색 이벤트)를받을 수 있습니다. 이 답변 참조 전경 파견.
  2. 이들을 사용하여 대상 장치의 활동에 대한 활성을위한 빔을 비활성화 (예를 들면, 수신 활동의 onCreate() 메소드) :

    NfcAdapter nfcAdapter = NfcAdapter.getDefaultAdapter(this);
    if (nfcAdapter != null) {
        nfcAdapter.setNdefPushMessage(null, this);
    }
    
  3. 소스 장치가 보낸 NDEF 메시지를 실제로 보내려는 NDEF 메시지 (예 : 텍스트 레코드가 포함 된 NDEF 메시지)를 변경하십시오. 이 작업을 수행하지 않으면 Android는 (기본적으로) 대상 장치에서 기본 활동을 시작할 기본 활동을 가져 오는 Android 응용 프로그램 레코드를 보냅니다. 이와 같이 NDEF 메시지를 설정할 수 있습니다 (예 : 송신 활동의 onCreate() 메소드에서) :

    NfcAdapter nfcAdapter = NfcAdapter.getDefaultAdapter(this);
    if (nfcAdapter != null) {
        byte[] text = "Hello World!".getBytes("UTF-8");
        byte[] recordPayload = new byte[3 + text.length];
        recordPayload[0] = (byte)0x02; //UTF-8, 2-byte language code
        recordPayload[1] = (byte)0x65; //'e'
        recordPayload[2] = (byte)0x6E; //'n'
        System.arraycopy(text, 0, recordPayload, 3, text.length);
        NdefMessage ndefMsg = new NdefMessage(
            new NdefRecord(NdefRecord.TNF_WELL_KNOWN, NdefRecord.RTD_TEXT, null, recordPayload)
        );
        nfcAdapter.setNdefPushMessage(ndefMsg, this);
    }
    
  4. 두 장치가 모두 Android 4.4+를 사용하는 경우 빔을 사용하는 대신 다른 장치의 NFC 리더 모드 . 이러한 기능을 결합 할 때 (즉, 하나의 장치에 HCE 온 호스트 카드 에뮬레이션 서비스가 있고 두 번째 장치를 판독기 모드로 전환하십시오) 두 장치는 ISO 7816-4 APDU를 사용하여 서로 통신 할 수 있습니다. 이것의 이점은 당신이 성가신 빔 UI를 완전히 건너 뛸 수 있다는 것입니다.



    1) Android 버전을 사용하는 경우 <4.4.
    2) 나는 NDEF 텍스트 레코드를 가정하고,

다른 팁

NfcAdapter를 인스턴스화하고 disableForegroundDispatch 또는 disableReaderMode를 호출하십시오.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top