当前位置: 首页 > 知识库问答 >
问题:

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

薛淮晨
2023-03-14

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

在应用程序中,我有一个飞溅屏幕和几个其他屏幕,可以从飞溅屏幕或通过NFC触摸启动。我的一个活动包含以下意图过滤器:

        <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按钮时它不是最重要的活动。在最近的应用列表中单击Splash将显示Splash,而不是之前位于顶部的活动。尽管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>

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

共有1个答案

柯升
2023-03-14

我必须承认,我不理解所描述的所有行为。Android如何处理活动和任务可能相当棘手。一条也许至关重要的信息是,当你的活动通过NFC意图启动时,它将作为一个单独的任务启动。我怀疑这与你正在观察的行为有关。

 类似资料:
  • 问题内容: 我正在寻找一种从Matlab中启动应用程序的方法。问题是,我的Matlab脚本将一些结果保存到文件中,然后应在关联的应用程序中打开(在这种情况下为Blender)。 我熟悉类似的命令 要么 以及其他一些方法,但实际上,该应用程序是从Matlab PATH启动的,因此它在Matlab目录中查找所需的各种库。例如: 是否有某种方法可以启动使用全局(系统)PATH的应用程序? 不久前,我以为

  • 我正在实施GCM。我的应用程序有两个活动,比如和。我正在使用此代码从通知栏启动: NotificationBar打开带有Intent的活动,说“B-通知-意图”,然后我使用后退按钮从打开活动,然后我再次启动从有一个新的Intent(说“B-A-意图”)。我使用下面的代码: 然后我在中获得新数据(即的屏幕被刷新)。但如果我按下Home(主页)按钮,然后从最近的应用程序启动应用程序,那么我会变老屏幕上

  • 我正在开发一个应用程序,它也可以从另一个应用程序启动。姑且称之为“被叫app”和“主叫app”。我正在使用protection level“signature”向“被调用的应用程序”的启动器活动添加权限。但是,当我添加此权限时,我无法从应用程序图标启动“被调用的应用程序”。上面写着“App未安装”。我还尝试使用“危险”保护级别。它给出了同样的错误。 我想这个问题可能是因为我给启动器活动提供了一个自

  • 我的应用程序有如下活动堆栈 A:加载活动 B:主要活动 C:细节活动 清单是这样的 当我从启动器启动应用程序时,它充当A- 但当我从通知启动应用程序时,因为我不想显示加载屏幕,启动活动B。所以,用户可以导航B- 但当用户在活动C中按Home键并从最近的应用程序列表中选择应用程序时,B会重新启动,状态不会保留。所以C活动总是消失。 我尝试了许多标志选项,但我没有找到解决方案。我想要的是应用程序的行为

  • 问题内容: 我正在编写一个使用node.js访问本地文件系统的桌面Web应用程序。我目前可以使用node.js打开文件并将其复制到硬盘驱动器上的不同位置。我还想做的是允许用户使用与文件类型关联的应用程序打开特定文件。换句话说,如果用户在Windows环境中选择“ myfile.doc”,它将使用该文件启动MSWord。 我一定是术语的受害者,因为除了与node.js进行通信的子进程的生成之外,我什

  • 我已经编写了一个Java应用程序,它可以构建flume配置文件,并将它们写入Linux机器上的磁盘。然后,应用程序构建flume命令,并尝试通过运行以下代码中的命令来启动flume代理: 如果我接受flume命令并通过终端手动执行它,它工作得很好。当java应用程序尝试执行flume命令时,什么都没有发生。这是类路径问题吗? Flume Command here: /root/flume-flum