【问题标题】:Preventing main activity from being launched if running already如果已经运行,则阻止启动主要活动
【发布时间】:2013-03-04 16:19:25
【问题描述】:

我有一个通过intent-filter 操作启动的应用程序。问题是每次事件/动作发生时,Android 都会显示一个对话框,要求启动应用程序,即使它已经启动。

我希望行为如下:

  • 如果应用未打开,用户要求启动应用。
  • 如果应用在前台运行,则不会显示对话框。

有没有办法实现这两个目标?我的目标是 Android 4.0。

编辑

这是我的意图过滤器:

        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
        <intent-filter>
            <action android:name="android.hardware.usb.action.USB_DEVICE_ATTACHED" />
        </intent-filter>

       <intent-filter>
            <action android:name="android.hardware.usb.action.USB_DEVICE_DETACHED" />
        </intent-filter>

       <meta-data
            android:name="android.hardware.usb.action.USB_DEVICE_DETACHED"
            android:resource="@xml/device_filter" />

【问题讨论】:

    标签: android android-intent android-activity intentfilter main-activity


    【解决方案1】:

    您需要将ActivitylaunchMode 设置为singleTask。您可以通过在 Android 清单中添加活动属性来做到这一点:

    android:launchMode="singleTask"
    

    有关详细信息,请参阅documentation

    【讨论】:

    • 这解决了一半的问题!应用程序不再启动两次,但每次设备连接/断开连接时仍会出现对话框。如果我想要其中的自动启动功能,也许这就是事情必须如何运作。
    • @brianv 是选择器对话框吗?可能是没有设置默认应用。
    • 当我连接设备时,会出现对话框。对话框顶部是我的应用程序的图标以及名称。框中的消息显示“连接此 USB 设备时打开 AppName?”然后有一个复选框“默认情况下用于此USB设备”
    • 我会尝试制作另一个应用程序,看看如果我有多个应用程序具有相同的设备过滤器,是否会出现选择器对话框...
    • documentation 在显示弹出窗口时非常模糊。 @BrianV,密切关注this post,它提出了同样的问题(你问题的第二部分),并且正在等待赏金。
    【解决方案2】:

    在要求用户启动应用程序时使用标志。首次启用时设置标志,并且每次检查是否勾选了此标志。例如if (flag == 1) askusertostart() else continue;,您是否清楚?

    【讨论】:

    • 不确定。我想首先阻止对话框显示,而不是简单地不重新启动应用程序。
    • 我没有调用对话框,当插入 USB 设备时,Android 操作系统正在执行此操作。它根据意图过滤器和 device_filter 中提供的值(正确)执行此操作。无论应用程序是否正在运行,它都会这样做,这就是我需要改变的。可以在活动中临时手动授予使用设备的权限,但我仍然希望在插入设备时显示对话框。
    • 我认为您还应该在&lt;meta-data&gt; 标签中配对USB_DEVICE_ATTACHED。看看这是否有帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-06
    相关资源
    最近更新 更多