簡短版本: 我正在尋找一種通過操作(如掃描NFC標籤)來啓動應用程序的方法,該操作將會帶來upp應用程序。如果在後臺已經有一個活動,它應該提出來。Android:通過操作打開並恢復(即掃描NFC標籤)
我對任務和活動歷史有點困惑。
長版本: 我正在構建一個支持NFC的應用程序。我有啓動活動LoginActivity,用於登錄用戶,另一個活動MainActivity登錄進程之後的所有其他活動。
我可以掃描NFC標籤進行登錄。但是我還想掃描NFC標籤以調出應用程序,如果它沒有焦點。我希望它可以啓動應用程序並調出默認行爲的LoginActivity。或者,如果應用程序在後臺運行,我希望它恢復,這通常意味着恢復MainActivity。
我已配置應用程序以偵聽NFC掃描操作,Android可以選擇應用程序作爲啓動器進行操作。但問題是,我不知道如何讓它恢復活動(如果有的話),或者只是在啓動器活動尚未啓動的情況下啓動應用程序。我可以讓他們中的一個工作。
最接近我想要的是讓它在應用程序處於後臺時掃描標籤時打開LoginActivity。如果我在這個LoginActivity上再次掃描,它會調出MainActivity(如果我以前在沒有標籤的情況下「正常」運行應用程序之前登錄過)。 我已經嘗試了很多。
運行「亞行外殼dumpsys活動」給我這個輸出後,我已經到應用程序完全記錄一次,然後最小化,並掃描NFC標籤:如果我掃描NFC標籤再次
Running activities (most recent first):
TaskRecord{44f7d8d0 #565 A=com.android.nfc U=0 sz=1}
Run #3: ActivityRecord{434997e8 u0 com.example.admin/.activities.LoginActivity t565}
TaskRecord{448674c8 #564 A=com.example.admin U=0 sz=2}
Run #2: ActivityRecord{430afbc0 u0 com.example.admin/.activities.MainActivity t564}
Run #1: ActivityRecord{430889b8 u0 com.example.admin/.activities.LoginActivity t564}
TaskRecord{441daf90 #305 I=com.android.settings/.Settings$DataUsageSummaryActivity U=0 sz=1}
Run #0: ActivityRecord{43d9f730 u0 com.android.settings/.Settings$DataUsageSummaryActivity t305}
我在MainActivity後得到這個出現:
Running activities (most recent first):
TaskRecord{448674c8 #564 A=com.example.admin U=0 sz=2}
Run #3: ActivityRecord{430afbc0 u0 com.example.admin/.activities.MainActivity t564}
TaskRecord{44f7d8d0 #565 A=com.android.nfc U=0 sz=1}
Run #2: ActivityRecord{434997e8 u0 com.example.admin/.activities.LoginActivity t565}
TaskRecord{448674c8 #564 A=com.example.admin U=0 sz=2}
Run #1: ActivityRecord{430889b8 u0 com.example.admin/.activities.LoginActivity t564}
TaskRecord{441daf90 #305 I=com.android.settings/.Settings$DataUsageSummaryActivity U=0 sz=1}
Run #0: ActivityRecord{43d9f730 u0 com.android.settings/.Settings$DataUsageSummaryActivity t305}
這是我的AndroidManifest.xml:
<application
android:name="AdminApplication"
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme"
>
<activity
android:name="com.example.admin.activities.LoginActivity"
android:label="@string/app_name"
android:theme="@android:style/Theme.NoTitleBar"
android:screenOrientation="portrait"
android:configChanges="orientation|keyboardHidden"
android:alwaysRetainTaskState="true"
android:launchMode="singleTop"
>
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
<intent-filter>
<action android:name="android.nfc.action.TAG_DISCOVERED"/>
<category android:name="android.intent.category.DEFAULT"/>
</intent-filter>
</activity>
<activity
android:name="com.example.admin.activities.MainActivity"
android:label="@string/title_activity_main"
android:screenOrientation="portrait"
android:configChanges="orientation|keyboardHidden"
android:alwaysRetainTaskState="true"
android:launchMode="singleTop"
>
<intent-filter>
<action android:name="intent.my.action"/>
<category android:name="android.intent.category.DEFAULT"/>
</intent-filter>
<intent-filter>
<action android:name="android.nfc.action.TAG_DISCOVERED"/>
</intent-filter>
</activity>
<service android:name="com.example.admin.xmpp.XmppService"/>
</application>