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

어플 실행 중 다른 이벤트 발생시에도 어플 기능 유지 방법

0 추천

안녕하세요. 다름이 아니라 nfc 태깅 관련한 어플을 개발했는데요

어플을 켜고 nfc태깅을 계속 하면 어플내에서 처리한 onNewIntent 함수 타면서

로직을 계속 잘 실행하는데요, 문제는 전화가 왔거나 혹은 어플내에서 웹브라우저 링크되어 있는

버튼 클릭해서 어플위에 웹브라우저가 위치하는 상황이 발생되면

이 때에 태깅시에는 어플에서 nfc를 인식하지 못하고 안드로이드 시스템에서 nfc를 캐치하네요.

그래서 다시 어플을 재실행 해주거나 어플 내의 해당 액티비티를 재 로딩 해야

그때서야 만들어놓은 nfc 태깅 로직을 탑니다.

 

어떻게 하면 어플 위에 따른 이벤트나 뷰가 와도 어플 내에 구현해 놓은 nfc 태깅 이벤트를 

타게 할 수 있을까요? 비슷한 예로는 홈버튼을 눌렀다가 다시 어플 선택해서

태깅 액티비티를 포그라운드로 선택해도  마찬가지 입니다.

액티비티는 태깅 레디 그대로인데 태깅해보면 어플에서 캣치 못하고 안드로이드 시스템에서 캣치합니다.

현재 해당 class의 android:launchMode="singleTask"로 해놨고 

    private void enableForegroundDispatch(boolean enable) {
        // Check for available NFC Adapter
        NfcManager manager = (NfcManager) getSystemService(NFC_SERVICE);
        if (manager != null && manager.getDefaultAdapter() != null) {
            if (enable) {
                PendingIntent intent = PendingIntent.getActivity(
                        this, 0, new Intent(this, getClass()).addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP), 0);
 
                IntentFilter ndef = new IntentFilter(NfcAdapter.ACTION_NDEF_DISCOVERED);
                try {
                    ndef.addDataType("*/*");
                } catch (MalformedMimeTypeException e) {
                    throw new RuntimeException("fail", e);
                }
                IntentFilter[] intentFiltersArray = new IntentFilter[] {ndef, };
                String[][] techListsArray = new String[][] { new String[] { NfcA.class.getName() } };
 
                manager.getDefaultAdapter().enableForegroundDispatch(this, intent, intentFiltersArray, techListsArray);
            } else {
                //manager.getDefaultAdapter().disableForegroundDispatch(this);
            }
        }
    }
 
위의 함수 따로 만들어서 
 
 
    @Override
    protected void onPause() {
        super.onPause();
        enableForegroundDispatch(false);
    }
 
이런식으로 쓰고 있어요.

어디를 손보면 어플 위에 웹브라우저 같은게 뜨게 되도 연속 태깅시

그 밑면에 실행중인 어플의 nfc 태깅 로직을 타게 할 수 있을까요?

도움 좀 부탁드리겠습니다.

 

alias (340 포인트) 님이 2014년 1월 7일 질문

1개의 답변

0 추천
액티비티가 백그라운드로 가면 onPause가 실행되면서 NFC 인텐트를 받지 못하게 되어 있는 것 같은데요.

매니페스트 파일에 인텐트 필터를 선언해보세요.
방귀과장 (18,940 포인트) 님이 2014년 1월 7일 답변
...