我希望我的Android应用程序像这样运行:
当连接了新的USB设备并且我的应用程序已经处于活动状态时,我的应用程序会请求使用USB设备的许可。
当再次连接相同(类型)的USB设备并且我的应用程序处于活动状态时,我的应用程序可以使用它而无需再次请求许可。
如果我的应用处于活动状态,则当前活动将继续运行(而不是 当连接了已知的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终端”似乎可以这样工作。
我该怎么做?
答案 0 :(得分:1)
“串行USB终端”应用程序使用
android:launchMode="singleTask"`
在https://github.com/kai-morich/SimpleUsbTerminal中可以看到,launchMode=singleTask
和singleTop
对大多数应用程序具有相同的效果。仅当您要在应用中启动其他活动时,例如然后使用Android设置,您应该使用singleTask,否则当当前显示设置活动时,将启动一个新的MainActivity。
答案 1 :(得分:0)
此(singleTop
)似乎已在清单中对其进行了修复:
<activity android:name=".MainActivity" android:launchMode="singleTop">
我不确定这是否是解决问题的正确方法。