Несколько действий с NDEF_DISCOVERED

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

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

<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>

person user3173339    schedule 08.01.2014    source источник


Ответы (2)


Создайте третью, невидимую активность (скажем, RedirectorActivity), без макета, с темой NoDisplay (android:theme="@android:style/Theme.NoDisplay") и исключенной из недавних (android:excludeFromRecents="true"). Назначьте свой intent-filter только этому единственному действию одному (удалите фильтр от других!) и добавьте всю необходимую логику в onCreate() упомянутого RedirectorActivity, чтобы запустить правильный Activity из него с обычным startActivity(). Наконец, убейте RedirectorActivity с помощью finish(), и все готово.

person Marcin Orlowski    schedule 08.01.2014

Если вы хотите, чтобы ваши текущие действия имели приоритет над другими, вам следует использовать систему диспетчеризации переднего плана NFC. См. раздел Расширенные возможности NFC: использование системы диспетчеризации переднего плана NFC. . (См. также этот вопрос.)

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

person Michael Roland    schedule 08.01.2014