Как начать деятельность с фона в android 10 - android Q - MIUI 11 - PullRequest
5 голосов
/ 29 января 2020

У меня проблема с запуском активности из фона в android 10 - android Q - MIUI 11 на реальном устройстве. В этой теме: запуск фоновой активности в android 10 Я нашел информацию, как это сделать на Android 10 и все отлично работает на эмуляторе.

Я тестировал это на Xiaomi Mi 9T Pro с Android 10 (MIUI 11) и кажется, что это не работает.

В logcat у меня есть следующие журналы:

-W/ActivityTaskManager: Background activity start for com.com.app allowed because SYSTEM_ALERT_WINDOW permission is granted.
-D/ActivityTaskManagerServiceInjector: MIUILOG- Permission Denied Activity : Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10000000 pkg=com.android.chrome cmp=com.android.chrome/com.google.android.apps.chrome.Main } pkg : com.com.app uid : 10283 tuid : 10052

Почему это не работает на устройстве xiaomi?

Редактировать:

Я нашел решение. В MIUI есть дополнительное разрешение, которое должно быть включено. Это называется: Показать всплывающее окно windows во время работы в фоновом режиме. Это код для отображения окна с таким разрешением:

Сначала я проверяю, установлен ли на телефоне пользователь MIUI:

public static boolean isMiUi() {
    return !TextUtils.isEmpty(getSystemProperty("ro.miui.ui.version.name"));
}

public static String getSystemProperty(String propName) {
    String line;
    BufferedReader input = null;
    try {
        java.lang.Process p = Runtime.getRuntime().exec("getprop " + propName);
        input = new BufferedReader(new InputStreamReader(p.getInputStream()), 1024);
        line = input.readLine();
        input.close();
    } catch (IOException ex) {
        return null;
    } finally {
        if (input != null) {
            try {
                input.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
    return line;
}

Если да, то может быть показано окно с разрешениями:

 private void showPermissionsDialog() {
    Intent intent = new Intent("miui.intent.action.APP_PERM_EDITOR");
    intent.setClassName("com.miui.securitycenter",
            "com.miui.permcenter.permissions.PermissionsEditorActivity");
    intent.putExtra("extra_pkgname", getPackageName());
    startActivity(intent);
}

Теперь мне нужно проверить, предоставил ли пользователь это разрешение, потому что я не хочу показывать это окно каждый раз при запуске приложения. Кто-нибудь знает, как это сделать?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...