首先,用例:2部手机在同一个屏幕上打开了我的应用程序。我希望一个用户能够与另一个用户共享屏幕内容(数据),而无需在使用NFC进行发送时打开活动的新实例。 (两款Android设备都运行Ice Cream Sandwich)
所以我在清单中声明了这样的 singleTop 活动。
<activity android:name=".activity.MyActivity" android:configChanges="orientation|keyboardHidden" android:launchMode="singleTop">
<intent-filter android:label="@string/activityLabel">
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<data android:mimeType="a.b.c/x.y.z" />
</intent-filter>
<intent-filter>
<action android:name="android.nfc.action.NDEF_DISCOVERED"/>
<category android:name="android.intent.category.DEFAULT"/>
<data android:mimeType="application/x.y.z"/>
</intent-filter>
</activity>
当触发VIEW
操作并且活动已经在最前面时,如果活动,则在相同实例中调用onNewIntent()
方法。
当触发NDEF_DISCOVERED
操作并且活动已经在最前面时,会在活动的新实例中调用onCreate()
方法。
答案 0 :(得分:4)
您描述了应用程序已打开且正确的Activity位于前台的情况。在这种情况下,您可以通过调用活动onResume()
(和onPause()
中的NfcAdapter.enableForegroundDispatch()
)中的disableForegroudDispatch()
来使用NFC意图的前台调度。这将强制所有NFC意图传递到您的活动(通过onNewIntent()
)。
答案 1 :(得分:0)
我没有给你答案。但我有一个解决方法:让NDEF_DISCOVERED启动一个新的活动。使该活动不可见(Theme.NoBackground
)并在onCreate中,使其使用singleTop启动MyActivity
并立即完成。 MyActivity
现在应显示为onNewIntent
。
答案 2 :(得分:0)
您是否看过Android Beam示例:
http://developer.android.com/resources/samples/AndroidBeamDemo/index.html
它实现了您想要的这种行为(减去VIEW意图过滤)。我不确定该意图是否会影响NDEF_DISCOVERED,但是修改Android Beam示例以查看是否可以导致与您的应用相同的行为会很有趣。
答案 3 :(得分:0)
你应该使用:android:launchMode =“singleInstance” 适合我。