MIUI 10不允许服务启动活动 - 小米红米Note

24

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

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

即使没有使用标志,通常活动窗口也显示其正确的布局。 但是,在安卓7上的小米Redmi Note 4上,活动布局没有显示。我在logcat中只看到以下行:

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

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

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

请问您对此有什么想法吗?


1
MIUI 11 上同样的问题。 - AlexS
一个修复方案可以在 https://dev59.com/3FIH5IYBdhLWcg3weuq6#65172936 找到。这与 Google Play 权限和目标 SDK 有关。 - BennyP
1个回答

31

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

这似乎是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或类似的对象,那么您将知道它已被授予。这是一个不太理想的解决方案,但对于某些情况可能会有用。


谢谢。这真的是问题所在。有没有办法在应用程序内请求此权限?或者通过编程方式添加它? - ilker Aktuna
我目前没有意识到任何问题。我将重定向到应用信息屏幕,并告诉他们如果他们在MIUI上,请启用它。 - Alex Newman
但是要做到这一点,您需要启动应用程序。您如何启动它?通过通知吗? - ilker Aktuna
当应用程序首次配置时,我会在主应用程序中请求另一个所需的权限。因此不是从服务中进行请求。 - Alex Newman
2
关于MIUI的真正有用的信息,只需授予权限即可从后台服务启动活动,无需更改任何代码。 - Panache
显示剩余10条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接