android - 从 NFC 启动的 Activity/应用程序从未出现在最近的应用程序列表中

标签 android android-activity nfc intentfilter android-recents

我正在开发一个针对 ICS+ 手机的应用程序。

在应用程序中,我有一个初始屏幕,以及几个可以从初始屏幕或通过 NFC 触摸启动的其他屏幕。我的一项 Activity 包含以下 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>

出于某种我无法弄清楚的原因,每当启动包含上述 Intent 过滤器的 Activity 时,当用户按下“Home”按钮时,该 Activity 不会出现在“Recent Apps”列表中。通过调试器,我已经验证它没有被破坏,只是停止了。

如果 Splash 屏幕在 ThingActivity 之前打开,则 Splash 将显示在“最近使用的应用程序”列表中,即使在按下主页按钮时它不是顶部 Activity 。单击“最近使用的应用程序”列表中的 Splash 将显示 Splash,而不是之前位于顶部的 Activity 。尽管 bg 中仍在运行线程和接收器,但启动屏幕顶部的任何 Activity 似乎都“丢失”了。

奇怪的行为是,此行为也适用于从包含 NFC intent 过滤器的 Activity 启动的任何 Activity ,或从这些 Activity 启动的任何 Activity 等。

如果我删除了 Intent 过滤器,这种行为就会消失,并且顶部的任何 Activity 都会始终显示在“最近的应用程序”列表中,但会被破坏,因为 NFC 是一项核心功能。

我的完整 list 如下:

<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>

为什么包含此 Intent 过滤器会阻止我的应用程序出现在最近的应用程序列表中?

最佳答案

我必须承认,我不理解所有描述的行为。 Android 如何处理 Activity 和任务可能非常棘手。一条可能很重要的信息是,当您的 Activity 通过 NFC Intent 启动时,它将作为单独的任务启动。我怀疑这与您观察到的行为有关。

关于android - 从 NFC 启动的 Activity/应用程序从未出现在最近的应用程序列表中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15419226/

相关文章:

android - afterTextChanged 追加不起作用

java - 具有 NFC 功能的 GSM 手机 SIM 卡上的应用程序可连接到 Android 应用程序

android - NDEF URI 负载中的非法字符

javascript - QuickConnect 与 Phonegap

java - 操作栏中的微调器 : NullPointerException on setAdapter (Android - Java)

android.support.v4.widget.NestedScrollView 高度问题

Android 常见的 Activity 和 FragmentActivity 父类(super class)

java - 尝试在指定时间后更改 Activity 后出错 - "Unfortunately, Application has stopped"

java - OnKeyListener.onKey 未被调用

java - 启用/禁用 NTAG213 计数器