簡體   English   中英

如何確保Android Beam無法啟動我的'singleTop'活動的新實例?

[英]How can I make sure Android Beam doesn't start a new instance of my 'singleTop' activity?

首先,用例: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()方法。

您描述了應用程序已打開且正確的Activity位於前台的情況。 在這種情況下,你可以通過調用利用NFC意圖的前景調度的NfcAdapter.enableForegroundDispatch()在活動的onResume()disableForegroudDispatch()onPause() 這將強制所有NFC意圖傳遞到您的Activity(通過onNewIntent() )。

你應該使用:android:launchMode =“singleInstance”適合我。

我沒有給你答案。 但我有一個解決方法:讓NDEF_DISCOVERED啟動一個新的活動。 作出這樣的活動不可見( Theme.NoBackground ),並在OnCreate,使其啟動MyActivity與singleTop並立即完成。 MyActivity現在應該與onNewIntent出現。

您是否看過Android Beam示例:

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

它實現了您想要的這種行為(減去VIEW意圖過濾)。 我不確定該意圖是否會影響NDEF_DISCOVERED,但是修改Android Beam示例以查看是否可以導致與應用程序相同的行為會很有趣。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM