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

如何防止Android在连接USB设备时创建新活动?,android,usb,Android,Usb,我希望我的Android应用程序能像这样工作: 当连接了新的USB设备,并且我的应用程序已处于活动状态时,我的应用程序会请求使用USB设备的权限 当同一(类型)USB设备再次连接,并且我的应用处于活动状态时,我的应用可以使用它,而无需再次请求许可 如果我的应用处于活动状态,则当前活动将继续运行(而不是 连接已知USB设备时启动的新活动) 我无法让#3正常工作:Android 9坚持启动一个新的活动,因为我的应用程序已注册为该USB设备的默认处理程序。我不关心默认处理程序:我不需要在设备连接时启动

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

  • 当连接了新的USB设备,并且我的应用程序已处于活动状态时,我的应用程序会请求使用USB设备的权限

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

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

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

    我试过这个:

    protected void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      if ((getIntent().getFlags() & Intent.FLAG_ACTIVITY_PREVIOUS_IS_TOP) != 0) {
        finish();
        return;
      }
      ...
    }
    
    不幸的是,这不起作用:它从堆栈中删除了我活动的两个副本,导航回Android主屏幕。我只想删除或阻止Android在连接已知USB设备时自动创建的活动

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

    我怎样才能完成它呢?

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

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

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

    串行USB终端应用程序使用

    android:launchMode="singleTask"`
    

    正如您在中所看到的,
    launchMode=singleTask
    singleTop
    对大多数应用程序具有相同的效果。仅当您要在应用程序中启动另一个活动(例如Android设置)时,才应使用singleTask,否则当前显示设置活动时将启动一个新的MainActivity。

    如果设备重新启动时已插入,并且应用程序重新启动时正在运行,则我仍然无法使其不创建第二个活动。你的应用程序怎么了?我在上面添加了缺少的单任务处理并更新了我的答案