简短版本: 我正在寻找一种通过操作(如扫描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>