MIUI 10 não deixa serviço iniciar atividade - Xiaomi Redmi Note

9

Meu aplicativo tem um serviço e uma atividade. No serviço, a atividade é chamada com o seguinte 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);

mesmo sem os sinalizadores, normalmente a janela de atividades é exibida com seu layout correto. No entanto, no Xiaomi Redmi Note 4 com Android 7, o layout da atividade não é exibido. Eu vejo apenas a seguinte linha no logcat:

Linha de tempo / linha de tempo: Linha de tempo: tempo da solicitação de atividade: 281438674 intenção: intenção {flg = 0x30000000 cmp = com.test.app / .MainActivity}

Acredito que este não é um problema do Android 7 (API 24) porque em outro dispositivo com o Android 7, o serviço pode iniciar a atividade com êxito. Eu acho que o MIUI está impedindo o lançamento da atividade de serviço.

Tentei alterar como a atividade foi definida no manifesto. Eu também tentei com várias bandeiras diferentes. Todos os meus testes falharam. Não consegui iniciar a atividade. O pior problema é que não há erro / exceção nos logs.

Alguma idéia sobre isso, por favor?

ilker Aktuna
fonte
Mesmo problema no MIUI 11.
AlexS

Respostas:

12

Na tela Informações do aplicativo, no aplicativo Configurações do sistema> Outras permissões> Exibir janelas pop-up durante a execução em segundo plano.

Isso parece introduzido no MIUI 11.

Edit: aqui está um pedaço de código que eu uso. Eu adiciono isso a uma lista de permissão em 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);
}

ATUALIZAÇÃO: Para verificar se essa permissão é concedida, você pode usar um serviço já em execução e iniciar uma atividade fictícia transparente e, na onCreatechamada de volta em um LocalBroadcastManagerou similar, você saberá que é concedida. É uma solução feia, mas pode ser útil para alguns.

Alex Newman
fonte
obrigado. esse é realmente o problema. existe alguma maneira de solicitar essa permissão dentro do aplicativo? ou adicioná-lo programaticamente?
Ilker Aktuna
Nada que eu saiba. Eu estou redirecionando para tela de informações do aplicativo e dizendo-lhes para permitir que, se eles estão em MIUI ..
Alex Newman
mas para fazer isso, você precisa iniciar o aplicativo. como você faz isso ? através de notificações?
Ilker Aktuna
Faço isso quando solicito outra permissão necessária quando o aplicativo está sendo configurado pela primeira vez. Portanto, no aplicativo principal, não em um serviço.
Alex Newman
11
Informações realmente úteis para o MIUI, pois apenas dar permissão para iniciar a atividade do serviço em segundo plano sem alterar nenhum código.
Panache 19/01