[英]How can I force my Android application to open a new instance of the same activity in singleTop launch mode
[英]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.