MIUI 10不允许服务启动活动-小米Redmi注意


9

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

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的Xiaomi Redmi Note 4上,不会显示活动布局。我只在logcat上看到以下行:

I /时间轴:时间轴:Activity_launch_request时间:281438674目的:目的{flg = 0x30000000 cmp = com.test.app / .MainActivity}

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

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

有什么想法吗?


MIUI 11上的相同问题
。– AlexS

Answers:


12

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

这似乎是在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回调a LocalBroadcastManager或类似对象上就知道它已被授予。这是一个丑陋的解决方案,但对某些人可能有用。


谢谢。这才是真正的问题。有什么方法可以在应用程序中请求此权限?还是以编程方式添加?
ilker Aktuna

我不知道。我将重定向到应用程序信息屏幕,并告诉他们启用这些功能(如果它们在MIUI上。)
Alex Newman

但是要做到这一点,您需要启动应用程序。你怎么做呢 ?通过通知?
ilker Aktuna

我在首次配置应用程序时请求其他必要权限时执行此操作,因此是从主应用程序而不是服务中获取的。
亚历克斯·纽曼

1
对于MIUI真正有用的信息,就像只授予后台服务的启动权限活动,而无需更改任何代码。
Panache
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.