4

我有一个通过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" /> 

回答

9

您需要将ActivitylaunchMode设置为singleTask。您可以在您的Android清单加入活动属性做到这一点:

android:launchMode="singleTask" 

有关详细信息,请参阅documentation

+0

这解决了一半的问题!应用程序不再启动两次,但每次设备连接/断开连接时对话框仍会出现。也许这只是如果我想要那里的自动启动能力,事情必须如何运作。 – Brian 2013-03-04 16:57:06

+0

@brianv是一个选择器对话框?可能没有设置默认应用程序。 – Phil 2013-03-04 17:10:10

+0

当我连接设备时,会出现对话框。在对话框的顶部是我的应用程序的图标以及名称。该框中的消息显示“此USB设备连接时打开AppName?”然后有一个复选框“默认使用此USB设备” – Brian 2013-03-04 17:15:16

0

使用标志启动应用程序。在第一次启用时设置标志,并且每次检查该标志是否打勾。例如if (flag == 1) askusertostart() else continue;如果这对你很清楚?

+0

不确定。我想阻止首先显示对话框,而不是简单地不重新启动应用程序。 – Brian 2013-03-04 16:26:03

+0

您可以放置​​用于调用对话框的代码吗? – g00dy 2013-03-04 16:28:09

+0

我没有调用对话框,Android操作系统在USB设备插入时执行此操作。它基于intent过滤器和device_filter中提供的值正确执行此操作。无论应用程序是否在运行,它都只是在做,而这正是我需要改变的。授予使用设备的权限可以从活动内部手动完成,但我仍然希望在设备插入时显示对话框。 – Brian 2013-03-04 16:30:07

相关问题