按下HOME按钮后,在没有5秒延迟的情况下从服务启动活动

Lio*_*ior 36 android

我遇到了此Android问题中描述的问题:http: //code.google.com/p/android/issues/detail?id = 4536

简单地说,按下HOME按钮后,android会阻止服务和广播接收器调用startActivity 5秒钟.

我也注意到了(理论上),具有以下许可:

"android.permission.STOP_APP_SWITCHES"
Run Code Online (Sandbox Code Playgroud)

允许您调用resumeAppSwitches(在ActivityManagerService中定义).查看最新版本的ActivityManagerService,将删除此代码.

问题:如何在没有5秒延迟的情况下使用startActivity启动活动?

Chi*_*bin 48

这是我找到的解决方案.

将你想要的意图立即放在PendingIntent中,然后在其上调用send()方法.

所以不要这样

Intent intent = new Intent(context, A.class);
                intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                context.startActivity(intent);
Run Code Online (Sandbox Code Playgroud)

就这样做

Intent intent = new Intent(context, A.class);
                intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                PendingIntent pendingIntent =
                        PendingIntent.getActivity(context, 0, intent, 0);
                try {
                    pendingIntent.send();
                } catch (PendingIntent.CanceledException e) {
                    e.printStackTrace();
                }
Run Code Online (Sandbox Code Playgroud)

  • 根据我的测试,它可以工作<=8.0.0,不能工作>=8.1.0 (3认同)
  • 你是我的英雄。谢谢! (2认同)
  • 已验证在Android 7.1.1中工作. (2认同)
  • 对我来说,这适用于 Android P,但不再适用于 Android Q (2认同)
  • 我已经在生产中使用它有一段时间了,但似乎已经在 Android Q 中失效了:'( (2认同)

Foa*_*Guy 16

我认为没有办法用当前的API做到这一点.我认为这就是他们打算如何工作,以便当用户通过主页按键退出时,应用程序无法强制自己重新打开.您可以将home/launcher intent添加到过滤器中,以用于您尝试启动的任何活动.然后,用户可以选择基本上将该应用视为主屏幕.然后,只要用户按下主页按钮,它就会毫不拖延地启动(他们必须从弹出的列表中选择它,询问他们想要使用哪个应用程序来完成此操作,但他们可以检查始终使用这个应用程序将在未来采取这一步.)