MIUI 10 不让服务启动 activity - 小米 Redmi Note

MIUI 10 doesn't let service start activity - Xiaomi Redmi Note

我的应用有一个服务和一个 activity。从服务中,使用以下代码调用 activity:

Intent intent = new Intent(getApplicationContext(), MainActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);

即使没有标志,通常 activity window 也会以正确的布局显示。 但是,在Android 7 的小米红米Note 4 上,activity 布局不显示。我只在 logcat 上看到以下行:

I/Timeline: Timeline: Activity_launch_request time:281438674 intent:Intent { flg=0x30000000 cmp=com.test.app/.MainActivity }

我相信这不是 Android 7 (API 24) 问题,因为在另一台带有 Android 7 的设备上,服务可以成功启动 activity。 我想,MIUI 正在阻止 activity 从服务中启动。

我尝试更改 activity 在清单中的定义方式。我还尝试了几个不同的标志。 我所有的测试都失败了。我无法成功启动 activity。最糟糕的问题是日志中没有 error/exception。

请问有什么想法吗?

在系统设置应用的应用信息屏幕中 > 其他权限 > 显示弹出窗口 windows 而 运行 在后台。

这个好像是MIUI 11引入的

编辑:这是我使用的一段代码。我将其添加到 RecyclerView.

中的权限列表中
Class<?> c = Class.forName("android.os.SystemProperties");
Method get = c.getMethod("get", String.class);
String miui = (String) get.invoke(c, "ro.miui.ui.version.name");
if (miui != null && miui.contains("11")) {
            PermissionData mPopup = new PermissionData();
            mPopup.text = "Other permissions > Display pop-up while in background";
            mPopup.onClickListener = new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    Intent intent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
                    Uri uri = Uri.fromParts("package", getPackageName(), null);
                    intent.setData(uri);
                    startActivity(intent);
                }
            };

            mPermissionData.add(mPopup);
}

更新:要检查此权限是否被授予,您可以使用已经 运行 的服务并启动虚拟透明 activity,并在 onCreate 回调 LocalBroadcastManager 或类似的,你会知道它被授予。这是一个丑陋的解决方案,但它可能对某些人有用。