gpt4 book ai didi

android - 无法在 android 10 中启动 Activity 背景 [ android Q ]

转载 作者:行者123 更新时间:2023-12-02 15:25:37 25 4
gpt4 key购买 nike

我使用 android 10 [android Q、galaxy 10],

我使用android studio 3.3,

使用AVD,制作了一个api 29 [android 10]虚拟手机。

在虚拟机上,我执行我的应用程序,然后启动其他应用程序,例如日历、计算器。所以我的应用程序 Activity 进入后台模式。

当我在 BroadcastReceiver 收到消息时。我调用startActivity。

这里,代码-->公共(public)类 myReceiver 扩展了 BroadcastReceiver {}

public void onReceive(Context context, Intent intent)
{
Intent intentRun = new Intent(context, LoginSuccess.class);
intentRun.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK|Intent.FLAG_ACTIVITY_CLEAR_TASK);
context.startActivity(intentRun);
}

但 LoginSuccess Activity 未显示。[当我的应用程序处于后台模式时]

使用相同的代码,LoginSuccess Activity 显示得很好当我的应用程序处于前台模式时。

call stack capture image

上图显示了调用堆栈就在我在广播接收器中调用 startActivity 之前。

我已阅读 Android 10 后台 Activity 问题指南。[developer.android.com/~~某个位置]

在引导线上,

我才知道如果该 Activity 存在于调用堆栈中,则可以启动它即使在后台模式下也是如此。

上面的代码,它尝试启动最近调用堆栈中存在的 Activity 。

为什么 startActivity 调用在后台模式下失败?[也许不会失败,但无论如何都没有激活到前台]

最佳答案

使用 Android Q,如果您的应用不包含下面链接中列出的异常(exception)情况,则无法从后台自动启动 Activity。

https://developer.android.com/guide/components/activities/background-starts

可能的解决方案:

1-您可以选择仅显示服务通知,然后单击即可启动待处理 Intent

2- 您可以使用全屏 Intent 立即显示您的 Intent ,如其他答案所示和 Google 建议的那样。

对于全屏Intent解决方案,如官方文档所述

The system UI may choose to display a heads-up notification, insteadof launching this intent, while the user is using the device.

3-要在后台自动启动 Activity ,我认为最可能的解决方案是将“SYSTEM_ALERT_WINDOW”添加到 list 文件中。并在应用程序第一次打开时请求用户许可一次。 (用户可以手动授予此权限 - (设置 - 应用程序 - 您的应用程序 - 高级 - 覆盖其他应用程序))

请求权限的示例代码:

在 list 中:

    <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>

应用程序中的某个位置:

 public static int ACTION_MANAGE_OVERLAY_PERMISSION_REQUEST_CODE= 2323;

//if the user already granted the permission or the API is below Android 10 no need to ask for permission

if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q &&
!Settings.canDrawOverlays(getContext()))
{RequestPermission()}

private void RequestPermission() {
// Check if Android M or higher
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
// Show alert dialog to the user saying a separate permission is needed
// Launch the settings activity if the user prefers
Intent intent = new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION,
Uri.parse("package:" + getActivity().getPackageName()));
startActivityForResult(intent, ACTION_MANAGE_OVERLAY_PERMISSION_REQUEST_CODE);
}
}

@Override
public void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);

if (requestCode == ACTION_MANAGE_OVERLAY_PERMISSION_REQUEST_CODE) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
if (!Settings.canDrawOverlays(getContext())) {
PermissionDenied();
}
else
{
// Permission Granted-System will work
}

}
}
}

关于android - 无法在 android 10 中启动 Activity 背景 [ android Q ],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59419653/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com