如何防止 Android 在连接 USB 设备时创建新的 activity?

How to prevent Android from creating a new activity when USB device is connected?

我希望我的 Android 应用程序像这样工作:

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

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

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

我无法让#3 工作:Android9 坚持启动一个新的 Activity,因为我的应用程序已注册为此 USB 设备的默认处理程序。我不关心默认处理程序:我不需要在连接设备时启动应用程序。 (不过,我确实需要#2。)

我试过这个:

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

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

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

我该如何完成?

这个(singleTop)似乎已经在清单中修复了它:

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

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

'Serial USB Terminal' 应用使用

android:launchMode="singleTask"`

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