Android:使用主页按钮留下应用程序,并在长按主页按钮时返回到不同的活动

eka*_*atz 5 android android-manifest android-layout

我有一个使用蓝牙的应用程序,如果在设备上关闭蓝牙,则无法访问.

我选择实现这个的方式如下:

  1. 创建了一个调度程序活动,该活动在首次启动应用程序时启动.
  2. 这个活动会检查蓝牙的状态,如果bt关闭,它会发送给你noBtScreen,如果它打开,它会带你到yesBtScreen

问题是,当用户到达noBtScreen然后点击主页按钮时,更改bt状态并返回到应用程序(通过长按主页按钮并选择我的应用程序)它到达noBtScreen它不应该到达的地方在此刻.

有明显天真的方法可以解决这个问题,例如,我可以检查活动中的bt状态onResume,但我认为应该在这里使用"正确"的解决方案.

我特意尝试了清单文件中的一些活动设置,我尝试将以下标志放在NoBtTask:
android:finishOnTaskLaunch
android:allowTaskReparenting组合而不是与
android:clearTaskOnLaunch
android:alwaysRetainTaskState

我也尝试将this.finish添加到noBtActivity::onStop方法中,但这也没有帮助(当时发生的事情是我进入了一次,下了车,当我再次进入时,什么都没发生,我留在主屏幕上,当时我再试一次,它确实把我带到了调度员活动,有趣的是看到这个日志:

09-21 17:54:49.511:INFO/ActivityManager(115):从pid 12603开始:Intent {cmp = com.test.elad/.NoBtActivity}

09-21 17:54:49.523:ERROR/Elad(12603):NoBtActivity.onCreate

09-21 17:54:49.527:ERROR/Elad(12603):NoBtActivity.onStart

09-21 17:54:49.527:ERROR/Elad(12603):NoBtActivity.onResume

09-21 17:54:49.765:INFO/ActivityManager(115):显示com.test.elad/.NoBtActivity:+ 248ms

09-21 17:54:51.867:ERROR/Elad(12603):NoBtActivity.onSaveInstanceState

09-21 17:54:51.867:ERROR/Elad(12603):NoBtActivity.onPause

09-21 17:54:51.867:INFO/ActivityManager(115):开始:Intent {act = android.intent.action.MAIN cat = [android.intent.category.HOME] flg = 0x10200000 cmp = com.android.launcher来自pid 115的/com.android.launcher2.Launcher}

09-21 17:54:51.882:VERBOSE/RenderScript_jni(195):surfaceCreated

09-21 17:54:51.882:VERBOSE/RenderScript_jni(195):surfaceChanged

09-21 17:54:52.277:ERROR/Elad(12603):NoBtActivity.onStop

09-21 17:54:56.183:INFO/ActivityManager(115):开始:意图{act = android.intent.action.MAIN cat = [android.intent.category.LAUNCHER] flg = 0x10100000 cmp = com.test.elad来自pid 115的/.DispatcherActivity}

09-21 17:54:56.265:ERROR/Elad(12603):NoBtActivity.onDestroy

Ree*_*eed 1

放入和android:noHistory="true"的清单中。noBtScreenyesBtScreen

以下是 android 文档中关于 noHistory 的内容:

值为“true”意味着该活动不会留下历史痕迹。它不会保留在任务的活动堆栈中,因此用户将无法返回到它。

编辑:

我还有另一个建议,希望能奏效。

当您startActivity从调度程序活动中时,您可以传递带有键名的额外内容"randomExtra"

然后在其他活动的onResume或中检查 if ,如果返回 true,则继续。如果返回 false,则执行onCreateintent.hasExtra("randomExtra")startActivity(new Intent(context, DispatcherActivity.class)