Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/340.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java MIUI 10不';t让服务启动活动-小米红米笔记_Java_Android_Miui - Fatal编程技术网

Java MIUI 10不';t让服务启动活动-小米红米笔记

Java MIUI 10不';t让服务启动活动-小米红米笔记,java,android,miui,Java,Android,Miui,我的应用程序有一个服务和一个活动。从服务中,使用以下代码调用活动: Intent intent = new Intent(getApplicationContext(), MainActivity.class); intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); startActivity(intent); 即使没有标志,活动窗口通常也会以正确的布局

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

Intent intent = new Intent(getApplicationContext(), MainActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
即使没有标志,活动窗口通常也会以正确的布局显示。 但是,在使用安卓7的小米红米Note 4上,活动布局不显示。我在logcat上只看到以下行:

I/时间线:时间线:活动\启动\请求时间:281438674 intent:intent{flg=0x30000000 cmp=com.test.app/.MainActivity}

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

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


有什么想法吗?

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

这似乎是在MIUI11中引入的

编辑:下面是我使用的一段代码。我将其添加到
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);
}
Class c=Class.forName(“android.os.SystemProperties”);
方法get=c.getMethod(“get”,String.class);
String miui=(String)get.invoke(c,“ro.miui.ui.version.name”);
如果(miui!=null&&miui.contains(“11”)){
PermissionData mPopup=新的PermissionData();
mPopup.text=“其他权限>在后台显示弹出窗口”;
mPopup.onClickListener=newview.onClickListener(){
@凌驾
公共void onClick(视图v){
意向意向=新意向(设置、操作、应用程序、详细信息、设置);
Uri=Uri.fromParts(“包”,getPackageName(),null);
intent.setData(uri);
星触觉(意向);
}
};
mPermissionData.add(mPopup);
}

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

MIUI 11上也存在同样的问题。可以在has todo中找到一个修复程序,其中包含Google play权限和目标SDK谢谢。这才是真正的问题所在。有没有办法在应用程序中请求此权限?还是以编程方式添加?我不知道。我正在重定向到应用程序信息屏幕,并告诉他们,如果他们在MIUI上,请启用该功能。但要做到这一点,您需要启动应用程序。你是怎么做到的?通过通知?当我在首次配置应用程序时请求另一个必需的权限时,我会这样做。因此,从主应用程序,而不是从服务。对于MIUI来说,真正有用的信息,就像只从后台服务授予权限而不更改任何代码一样。