MIUI 10 no permite que el servicio comience la actividad - Xiaomi Redmi Note

9

Mi aplicación tiene un servicio y una actividad. Desde el servicio, se llama a la actividad con el siguiente código:

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

incluso sin las banderas, normalmente la ventana de actividad se muestra con su diseño correcto. Sin embargo, en Xiaomi Redmi Note 4 con Android 7, el diseño de la actividad no se muestra. Solo veo la siguiente línea en logcat:

I / Timeline: Timeline: Activity_launch_request time: 281438674 intento: Intención {flg = 0x30000000 cmp = com.test.app / .MainActivity}

Creo que esto no es un problema de Android 7 (API 24) porque en otro dispositivo con Android 7, el servicio puede iniciar con éxito la actividad. Supongo que MIUI está impidiendo el lanzamiento de la actividad del servicio.

Intenté cambiar cómo se definió la actividad en el manifiesto. También probé con varias banderas diferentes. Todas mis pruebas fallaron. No pude tener éxito en comenzar la actividad. El peor problema es que no hay error / excepción en los registros.

¿Alguna idea sobre esto por favor?

ilker Aktuna
fuente
Mismo problema en MIUI 11.
AlexS

Respuestas:

12

En la pantalla de información de la aplicación desde la aplicación Configuración del sistema> Otros permisos> Mostrar ventanas emergentes mientras se ejecuta en segundo plano.

Esto parece introducido en MIUI 11.

Editar: aquí hay un fragmento de código que uso. Agrego eso a una lista de permisos en a 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);
}

ACTUALIZACIÓN: para verificar si se otorga este permiso, puede usar un servicio que ya se está ejecutando e iniciar una actividad ficticia transparente, y onCreatevolver a llamar a uno LocalBroadcastManagero similar y sabrá que está otorgado. Es una solución fea, pero puede ser útil para algunos.

Alex Newman
fuente
gracias. Ese es realmente el problema. ¿Hay alguna forma de solicitar este permiso dentro de la aplicación? o agregarlo mediante programación?
ilker Aktuna
Ninguno que yo sepa. Estoy redirigiendo a la pantalla de información de la aplicación y les digo que habiliten eso si están en MIUI ..
Alex Newman
pero para hacer eso necesitas iniciar la aplicación. Cómo lo haces ? a través de notificaciones?
ilker Aktuna
Lo hago cuando solicito otro permiso requerido cuando la aplicación se está configurando por primera vez, así que desde la aplicación principal, no es un servicio.
Alex Newman
1
Información realmente útil para MIUI, ya que solo dando permiso comenzó la actividad del servicio en segundo plano sin cambiar ningún código.
Panache