Android 从NFC启动的活动/应用程序从未出现在最近的应用程序列表中
我正在开发一个针对ICS+手机的应用程序 在这个应用程序中,我有一个启动屏幕,还有几个其他屏幕可以从启动屏幕或通过NFC touch启动。我的一项活动包含以下意图过滤器:Android 从NFC启动的活动/应用程序从未出现在最近的应用程序列表中,android,android-activity,nfc,intentfilter,android-recents,Android,Android Activity,Nfc,Intentfilter,Android Recents,我正在开发一个针对ICS+手机的应用程序 在这个应用程序中,我有一个启动屏幕,还有几个其他屏幕可以从启动屏幕或通过NFC touch启动。我的一项活动包含以下意图过滤器: <intent-filter> <action android:name="android.nfc.action.NDEF_DISCOVERED" /> <category android:name="android.intent.
<intent-filter>
<action android:name="android.nfc.action.NDEF_DISCOVERED" />
<category android:name="android.intent.category.DEFAULT" />
<data android:mimeType="application/com.myapp.thing.android.beam.ip" />
</intent-filter>
由于某些原因,我无法理解,每当启动包含上述意图过滤器的活动时,当用户按下“主页”按钮时,该活动不会出现在“最近的应用程序”列表中。通过调试器,我验证了它没有被销毁,只是停止了
如果启动屏幕在ThingActivity之前打开,则启动将显示在最近的应用程序列表中,即使按下Home(主页)按钮时它不是最重要的活动。单击“最近使用的应用”列表中的启动按钮将显示启动按钮,而不是之前位于顶部的活动。尽管bg中仍在运行线程和接收器,但启动屏幕上的任何活动似乎都“丢失”
更奇怪的行为是,此行为也适用于从包含NFC意图过滤器的活动启动的任何活动,或从这些活动启动的任何活动,等等
如果我删除了意图过滤器,这种行为就会消失,任何位于顶部的活动都将始终显示在最近的应用程序列表中,但会被破坏,因为NFC是一个核心功能
我的全部舱单如下:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.myapp.thing"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="14"
android:targetSdkVersion="16" />
<!-- Permission required to use the TCP transport -->
<uses-permission android:name="android.permission.INTERNET" >
</uses-permission>
<uses-permission android:name="android.permission.CHANGE_WIFI_MULTICAST_STATE" >
</uses-permission>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" >
</uses-permission>
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" >
</uses-permission>
<!-- Permission required to use the Bluetooth transport -->
<uses-permission android:name="android.permission.BLUETOOTH" >
</uses-permission>
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" >
</uses-permission>
<uses-permission android:name="android.permission.BROADCAST_STICKY" >
</uses-permission>
<uses-permission android:name="android.permission.NFC" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" >
</uses-permission>
<uses-permission android:name="android.permission.WAKE_LOCK" />
<!-- RECORD_AUDIO is needed to create an audio recorder -->
<uses-permission android:name="android.permission.RECORD_AUDIO" >
</uses-permission>
<!-- MODIFY_AUDIO_SETTINGS is needed to use audio effects such as environmental reverb -->
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" >
</uses-permission>
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name=".ui.SplashActivity"
android:configChanges="keyboardHidden|orientation"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name="com.myapp.thing.ui.ReceiverActivity"
android:configChanges="keyboardHidden|orientation"
android:label="@string/app_name"
android:screenOrientation="portrait" >
</activity>
<activity
android:name="com.myapp.thing.ui.BaseActivity"
android:configChanges="keyboardHidden|orientation"
android:label="@string/app_name"
android:screenOrientation="portrait" >
</activity>
<activity
android:name="com.myapp.thing.ui.BroadcasterActivity"
android:configChanges="keyboardHidden|orientation"
android:label="@string/app_name"
android:screenOrientation="portrait" >
</activity>
<activity
android:name="com.myapp.thing.ui.ChooseFileActivity"
android:configChanges="keyboardHidden|orientation"
android:label="@string/app_name"
android:screenOrientation="portrait" >
</activity>
<activity
android:name="com.myapp.thing.ui.ThingActivity"
android:configChanges="keyboardHidden|orientation"
android:label="@string/app_name"
android:screenOrientation="portrait" >
<intent-filter>
<action android:name="android.nfc.action.NDEF_DISCOVERED" />
<category android:name="android.intent.category.DEFAULT" />
<data android:mimeType="application/com.myapp.thing.android.beam.ip" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.SEND_MULTIPLE" />
<action android:name="android.intent.action.SEND" />
<category android:name="android.intent.category.DEFAULT" />
<data android:mimeType="audio/*" />
</intent-filter>
</activity>
<service
android:name="com.myapp.thing.service.ThingService"
android:label="ThingService" >
</service>
</application>
为什么包含此意向过滤器会阻止我的应用程序被列入最近的应用程序列表?我必须承认,我不理解所描述的所有行为。Android如何处理活动和任务可能相当棘手。一条可能至关重要的信息是,当您的活动通过NFC意图启动时,它将作为单独的任务启动。我怀疑这与您正在观察的行为有关。您是否正在从该活动调用
finish()
?不,除非用户明确点击按钮,否则它不会完成。我已经调试过了,onDestroy没有命中。在你正在测试的设备上,你是否碰巧启用了开发者选项“不保留活动”?关于在按下HOME键后返回应用程序并返回初始屏幕而不是堆栈顶部的活动,这可能是Android launcher的一个讨厌的错误。请确保您第一次从可用应用程序列表中启动应用程序,而不是从安装程序或Eclipse或IntelliJ之类的IDE,请参阅和@DavidWasser我没有启用“不保留活动”选项。这确实与此有关。如果我使用launchMode singleTask进行活动,情况会好一点,该活动会出现在最近的应用程序列表中。