2014-01-08 3 views
1

У меня есть два действия в моем приложении, у которых есть тот же фильтр намерений «android.nfc.action.NDEF_DISCOVERED», есть ли способ сказать программе программно, что я хочу начать конкретную деятельность, а не выбрать, какую деятельность начать с открытия ndef? Чтобы быть более ясным, одно устройство запускает Activity1, а второе устройство запускает Activity2, всякий раз, когда я лучу с одного или другого устройства, устройство спрашивает меня, какую деятельность следует начинать, поскольку оба они имеют одинаковый фильтр намерений.Несколько действий с NDEF_DISCOVERED

вот мой манифест:

<activity 
      android:label="@string/app_name" 
      android:name=".Activity1" 
      android:screenOrientation="portrait" 
      > 
      <intent-filter > 
       <action android:name="com.example.activity1" /> 
       <category android:name="android.intent.category.DEFAULT" /> 
      </intent-filter> 
      <intent-filter> 
       <action android:name="android.nfc.action.NDEF_DISCOVERED" /> 

       <category android:name="android.intent.category.DEFAULT" /> 

       <data android:mimeType="text/plain" /> 
      </intent-filter> 
     </activity> 
     <activity 
      android:label="@string/app_name" 
      android:name=".Activity2" 
      android:screenOrientation="portrait" 
      > 
      <intent-filter > 
       <action android:name="com.example.activity2" /> 
       <category android:name="android.intent.category.DEFAULT" /> 
      </intent-filter> 
      <intent-filter> 
       <action android:name="android.nfc.action.NDEF_DISCOVERED" /> 

       <category android:name="android.intent.category.DEFAULT" /> 

       <data android:mimeType="text/plain" /> 
      </intent-filter> 
     </activity> 

ответ

2

Создать третью, невидимую активность (например, RedirectorActivity), без какого-либо макета и стилем NoDisplay и исключен из списка недавних. Затем назначьте свой intent-filter только этой активности (удалите из других) и добавьте всю необходимую логику в onCreate() из RedirectorActivity, чтобы запустить правильную операцию с нее с помощью регулярного startActivity() и, наконец, убить Redirector с помощью finish().

0

Если вы хотите, чтобы ваш текущий приоритет работы над другим, вы должны использовать систему диспетчеризации переднего плана NFC. См. Advanced NFC: Using the NFC Foreground Dispatch System. (См. Также question.)

Также вы можете подумать, имеет ли смысл использовать ваше приложение для использования разных типов записей NDEF для запуска каждого из ваших двух действий. В этом случае отправитель может решить, какая деятельность должна быть запущена.

Смежные вопросы