连接USB设备后如何防止Android创建新活动?

时间:2019-06-23 00:45:51

标签: android usb

我希望我的Android应用程序像这样运行:

  1. 当连接了新的USB设备并且我的应用程序已经处于活动状态时,我的应用程序会请求使用USB设备的许可。

  2. 当再次连接相同(类型)的USB设备并且我的应用程序处于活动状态时,我的应用程序可以使用它而无需再次请求许可。

  3. 如果我的应用处于活动状态,则当前活动将继续运行(而不是 当连接了已知的USB设备时,将启动一个新的活动。

我无法运行#3:Android 9坚持要启动一个新的Activity,因为我的应用程序已注册为此USB设备的默认处理程序。我不在乎默认处理程序:连接设备后,我不需要启动任何应用程序。 (但是,我确实需要#2。)

我尝试过:

protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  if ((getIntent().getFlags() & Intent.FLAG_ACTIVITY_PREVIOUS_IS_TOP) != 0) {
    finish();
    return;
  }
  ...
}

不幸的是,这没有用:它从堆栈中删除了我的活动的两个副本,并导航回Android主屏幕。我只想删除或阻止在连接已知USB设备时由Android自动创建的活动。

我想要的是可能的,应用程序“串行USB终端”似乎可以这样工作。

我该怎么做?

2 个答案:

答案 0 :(得分:1)

“串行USB终端”应用程序使用

android:launchMode="singleTask"`

https://github.com/kai-morich/SimpleUsbTerminal中可以看到,launchMode=singleTasksingleTop对大多数应用程序具有相同的效果。仅当您要在应用中启动其他活动时,例如然后使用Android设置,您应该使用singleTask,否则当当前显示设置活动时,将启动一个新的MainActivity。

答案 1 :(得分:0)

此(singleTop)似乎已在清单中对其进行了修复:

<activity android:name=".MainActivity" android:launchMode="singleTop">

我不确定这是否是解决问题的正确方法。