2012-10-07 7 views
1

(Nexus S에서 4.1.1 JellyBean 사용) these instructions을 따르려고하지만 어떤 활동이 제한적일 수 있습니까? setNdefPushMessage()은 다소 모호합니다. 를 통해 HTTP 요청을 처리하기위한 활동이 현재 내 앱 :setNdefPushMessage()를 사용하는 방법

<activity android:name=".HandleUrlActivity" 
      android:label="@string/title_handle_url_message" > 
    <intent-filter> 
     <action android:name="android.intent.action.VIEW"/
     <category android:name="android.intent.category.DEFAULT" /> 
     <data android:scheme="http" /> 
    </intent-filter> 
</activity> 

충돌과 :

setNdefPushMessage()가 HandleUrlActivity 내에서 호출되는
java.lang.IllegalStateException: API cannot be called while activity is paused 

().

어떤 활동에서 setNdefPushMessage()를 사용할 수 있습니까? 또는 Ndef가 제공 될 때까지 활동을 계속 실행하는 방법과 그 활동이 언제 반환/종료 할 수 있는지 어떻게 알 수 있습니까? 전화 :

NfcAdapter nfcAdapter = NfcAdapter.getDefaultAdapter(this); 
    nfcAdapter.setNdefPushMessage(ndef, this); 
    nfcAdapter.wait(); 

함께 또는 대기없이 위의 오류를 제공합니다. 분명히 setNdefPushMessage()은 wait-for-nable-capable-capable-device-proximity를 처리하고 이벤트를 전송하기위한 몇 가지 지원 메커니즘이 필요하며 모든 것이 완료 될 때까지 차단할 것으로 예상했지만 분명히 그렇지 않습니다.

(enableForegroundNdefPush/disableForegroundNdefPush 분명히이 문제를 해결하지만, setNdefPushMessage는이 모든 것을 처리하는 주장과 ICS/JB 위해 사용되지 않습니다 보인다 ...)

답변

0

을 당신이 뭘 하려는지? setNdefPushMessage()은 단순히 메시지를 등록하기 만합니다. Android 런타임에서 호환되는 장치를 감지 한 경우에만 메시지가 전송됩니다. 당신은 이것을 제어 할 수 없으므로, wait() 등으로 전화 할 필요가 없습니다 (일반적으로 활동주기를 제어하려고하면 안됩니다). onCreate()에서 호출하면 작동하지만 아직 활동이 완전하지 않고 유효한 Context이없는 경우 생성자에서 호출하지 않아야합니다. 일반적으로, VIEW을 처리하는 활동에서 이것을 갖는 것은별로 의미가 없습니다. 시작될시기를 실제로 제어 할 수 없기 때문에 달성하려는 것은 무엇입니까?

+0

지금은 단순히 URL을 원격 장치에 "푸시"하려고합니다. 호환되는 대상 장치가 가까이 올 때까지 화면을 "차단"해야합니다. NFC 시스템은이 작업이 완료 될 때까지 다른 NFC 작업을 잠그는 것을 알아야합니다. 목적지 장치가 근접에서 _removed_ 될 때까지 뭔가를이 스테이 시스를 만들 필요가 있습니다. 따라서 어떤 종류의 "정상적인 상태로 돌아 가기"기능이 뒤 따르는 대기 기간입니다. (btw, 사용자가 URL을 선택하거나 다른 브라우저 시작 이벤트를 선택하면 http VIEW 의도가 발생 함) – duanev

+0

"NFC 시스템"을 제어 할 수 없기 때문에이 작업을 수행 할 수 없습니다. 당신은 inents에 등록 할 수만 있고 밀어 넣을 NDEF 메시지를 지정할 수 있습니다. –

+0

질문은 나의 예제가 장점이 있는지 여부에 관계없이 유효합니다. 나는 나의 요점을 다소 더 명확히 할 것이다. 전경 앱이 현재 NFC 작업을 제어합니다 (기본값은 앱 URI를 전송하는 것입니다). 내가 언급 한 문서는 setNdefPushMessage가이 "잠금"을 기본값보다 우선시한다고 말합니다 - 나는 인정하지만, 의미는 여전히 분명합니다. 따라서 setNdefPushMessage()를 차단할 필요는 없지만 분명히 앱에서 적어도 하나의 활동을 일시 중지하지 않도록 (그리고 내 ndef 메시지가 전송 될 때까지 파괴되지 않도록)해야합니다. – duanev

관련 문제