为了账号安全,请及时绑定邮箱和手机立即绑定

按下HOME按钮后,无需5秒的延迟即可从服务启动活动

按下HOME按钮后,无需5秒的延迟即可从服务启动活动

慕田峪9158850 2019-12-26 14:19:57
我遇到此Android问题中描述的问题:http : //code.google.com/p/android/issues/detail?id=4536简而言之,在按下HOME按钮后,Android会阻止服务和广播接收者调用startActivity 5秒钟。我还注意到(理论上),具有以下许可:"android.permission.STOP_APP_SWITCHES"允许您调用resumeAppSwitches(在ActivityManagerService中定义)。查看最新版本的ActivityManagerService,将删除此代码。问题:如何在不延迟5秒钟的情况下使用startActivity启动活动?
查看完整描述

3 回答

?
烙印99

TA贡献1829条经验 获得超13个赞

我认为目前的API没有办法做到这一点。我认为这就是他们希望其工作的方式,以便当用户按主键退出时,应用程序无法强制自己重新打开。您可以将home /启动器意图添加到过滤器中,以进行尝试启动的任何活动。然后,用户将可以选择基本将其视为主屏幕。然后,只要用户按下主屏幕按钮,它就会立即启动(他们必须从弹出的列表中选择它,询问他们要使用哪个应用来完成此操作,但他们可以检查是否始终使用这个应用程式,可让您日后迈出这一步。)


查看完整回答
反对 回复 2019-12-26
?
慕慕森

TA贡献1856条经验 获得超17个赞

这是我找到的解决方案。


将要立即开始的意图放在PendingIntent中,然后在其上调用send()方法。


所以代替这个


Intent intent = new Intent(context, A.class);

                intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

                context.startActivity(intent);

只是这样做


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();

                }


查看完整回答
反对 回复 2019-12-26
?
九州编程

TA贡献1785条经验 获得超4个赞

我正在使用AlarmManager从Service立即启动Activity。即使您之前已按下主页按钮,活动也将立即开始。


在Android 5.0.1(Galaxy Alpha)上进行了测试。


请勿在6.0.1(Nexus 7 2013)上使用:-(


不要在4.1.2(Galaxy S II)下工作:-(


不要在4.3(ASUS MeMO Pad FHD 10 ME302C)上工作:-(


@TargetApi(Build.VERSION_CODES.KITKAT)

private void startActivity() {


    Intent intent = new Intent(this, Main.class);

    intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);


    PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, intent, PendingIntent.FLAG_ONE_SHOT);

    AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);

    long now = Calendar.getInstance().getTimeInMillis();

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT)

        alarmManager.setExact(AlarmManager.RTC_WAKEUP, now, pendingIntent);

    else

        alarmManager.set(AlarmManager.RTC_WAKEUP, now, pendingIntent);

}


查看完整回答
反对 回复 2019-12-26
  • 3 回答
  • 0 关注
  • 891 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信