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
或类似的,你会知道它被授予。这是一个丑陋的解决方案,但它可能对某些人有用。
我的应用有一个服务和一个 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
或类似的,你会知道它被授予。这是一个丑陋的解决方案,但它可能对某些人有用。