2016-06-07 4 views
0

시스템에서 NFC 태그가 감지 될 때 표시되는 NFC 앱 선택기 대화 상자에서 내 애플리케이션을 열려고합니다. 내 응용 프로그램이 선택기 대화 상자에 나타납니다.NFC 의도는 앱이 백그라운드에서 실행되고 있지 않은 경우에만 실행기 활동이있는 앱을 실행합니다.

사례 1 :

하는 응용 프로그램은 백그라운드에서 실행됩니다. NFC 태그 감지에서 백그라운드 작업 (작업 중 맨 위 활동)을 포 그라운드로 가져옵니다.

문제는 매니페스트 파일 시스템에서 NFC 의도를 처리하는 활동을 지정해야합니다. 따라서 사용자가 앱 선택기 시스템에서 내 애플리케이션을 선택하면 지정된 활동이 실행됩니다. 배경 활동을 전면에 가져 오는 대신

사례 2 :

하는 응용 프로그램이 점심 응용 프로그램을 실행하지 않는 실행 활동이다.

문제는 매니페스트 파일에 NFC 의도 핸들러로 실행 화면을 지정해야이를합니다. 이렇게하면 내 앱이 케이스 1에서 실패합니다!

AndoridManifest.xml는 두 경우 모두를 만족시키는 해결책이 될 수있는 일

  <activity android:name=".activityName" ...> 
       <intent-filter> 
        <action android:name="android.nfc.action.TECH_DISCOVERED"/> 
        <category android:name="android.intent.category.DEFAULT" /> 
       </intent-filter> 
       <meta-data 
        android:name="android.nfc.action.TECH_DISCOVERED" 
        android:category="android.intent.category.DEFAULT" 
        android:resource="@xml/nfc_tech_filter" /> 
     </activity> 

스 니펫? ActivityManager으로 시도했지만 해결책을 얻지 못했습니다.

+0

당신은 무엇을하려고합니까? NMA가 포함 된 AndroidMAnifest의 일부를 게시 할 수 있습니까? – LaurentY

+0

@LaurentY AndroidManifest에서 스 니펫을 추가했습니다. – vsvankhede

+0

내가 생각하는 한 가지 해결책은 UI가없는 활동을 작성한 다음 애플리케이션 태스크가 있는지 확인하는 것입니다. 백그라운드에서 앱이 실행중인 경우 두 번째 최고 활동을 시작하거나 애플리케이션을 시작하십시오! – vsvankhede

답변

0

런처 활동의 onCreate()에 다음 코드를 추가하여 문제를 해결했습니다. 나는 런처 활동을 위해 필터와 메타 데이터를 의도적으로 유지했다. 여기서 트릭은 애플리케이션 태스크가 이미 시스템에 실행 중인지 여부를 확인하는 것입니다.

if ((getIntent().getFlags() & Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT) != 0) { 
      finish(); 
      return; 
} 

위의 코드는 응용 프로그램 작업이 이미 실행 중인지 확인합니다. 실행중인 실행기 활동으로 인해 자신이 닫히고 작업의 가장 활발한 활동이 전면에 나타납니다.

참조 :

https://stackoverflow.com/a/21022876/2465752 https://developer.android.com/reference/android/R.styleable.html#AndroidManifestActivity_launchMode