21

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

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

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

I/时间线:时间线:Activity_launch_request 时间:281438674 意图:意图 { flg=0x30000000 cmp=com.test.app/.MainActivity }

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

我尝试更改清单中定义活动的方式。我还尝试了几种不同的标志。我所有的测试都失败了。我无法成功启动活动。最糟糕的问题是日志中没有错误/异常。

请问有什么想法吗?

4

1 回答 1

30

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

这似乎是在 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);
}

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

于 2019-12-17T10:23:49.323 回答