4

まず、使用例: 2 台の電話で、同じ画面でアプリが開かれています。NFC を使用してビームするときに、必ずしもアクティビティの新しいインスタンスを開くことなく、1 人のユーザーが画面のコンテンツ (データ) を他のユーザーと共有できるようにしたいと考えています。(どちらの 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

アプリが既に開いていて、適切なアクティビティがフォアグラウンドにある場合について説明します。その場合、NfcAdapter.enableForegroundDispatch()Activity のonResume()(およびdisableForegroudDispatch()onPause()) を呼び出して、NFC インテントのフォアグラウンド ディスパッチを利用できます。これにより、すべての NFC インテントが強制的にアクティビティに配信されます (経由onNewIntent())。

于 2012-02-20T20:21:48.460 に答える
0

答えはありません。しかし、回避策があります。NDEF_DISCOVERED に新しいアクティビティを開始させます。そのアクティビティを非表示 ( Theme.NoBackground) にし、onCreate で、MyActivitysingleTop で開始してすぐに終了するようにします。MyActivityで表示されるはずonNewIntentです。

于 2012-02-19T20:02:58.717 に答える
0

android:launchMode="singleInstance" を使用する必要があります。

于 2012-05-10T13:00:00.843 に答える