4

首先,用例:两部手机在同一个屏幕上打开了我的应用程序。我希望一个用户能够与另一个用户共享屏幕内容(数据),而不必在使用 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()方法在该活动的一个实例中被调用。

4

4 回答 4

4

您描述了应用程序已经打开并且正确的 Activity 处于前台的情况。在这种情况下,您可以通过调用NfcAdapter.enableForegroundDispatch()Activity onResume()(和disableForegroudDispatch()in onPause())来利用 NFC 意图的前台调度。这将强制将所有 NFC Intent 传递到您的 Activity(通过onNewIntent())。

于 2012-02-20T20:21:48.460 回答
0

我没有答案给你。但我有一个解决方法:让 NDEF_DISCOVERED 开始一项新活动。使该活动不可见(Theme.NoBackground)并在 onCreate 中,使其MyActivity以 singleTop 开始并立即完成。MyActivity现在应该出现onNewIntent.

于 2012-02-19T20:02:58.717 回答
0

你应该使用: android:launchMode="singleInstance" 为我工作。

于 2012-05-10T13:00:00.843 回答
0

您是否看过 Android Beam 示例:

http://developer.android.com/resources/samples/AndroidBeamDemo/index.html

它实现了您想要的这种行为(减去 VIEW 意图过滤)。我不确定该意图是否会影响 NDEF_DISCOVERED ,但也许修改 Android Beam 示例以查看您是否可以导致与您的应用程序相同的行为会很有趣。

于 2012-02-23T02:48:09.250 回答