Какой аналог функции Settings.ACTION_PRINT_SETTINGS в интерфейсе REALME UI?

При вызове интента для перехода к настройкам службы печати на телефонах Realme активити открывается, однако при попытке изменить статус службы (включить/выключить) возникает ошибка в прошивке. В частности, возникает исключение `java.lang.NullPointerException` при попытке вызвать метод `setMaxWidth` на объекте, который равен нулю. Это связано с тем, что разработчики не учли изменения в лайте активити при портировании, что приводит к открытию устаревшей версии раздела для совместимости. Поскольку в стандартных настройках предлагается аналог в оболочке Realme UI, можно ли узнать о вендорном аналоге, который позволяет попасть к нужной части настроек?
  • 8 октября 2024 г. 12:06
Ответы на вопрос 2
К сожалению, существует несколько версий Realme UI, и доступные вендорные реализации могут различаться в зависимости от модели устройства или версии прошивки. В большинстве случаев для перехода к настройкам печати на устройствах Realme можно попробовать использовать различные интенты.

Однако, если вызов `Settings.ACTION_PRINT_SETTINGS` вызывает ошибки, можно попробовать использовать другие способы открыть настройки печати. Например, можно попробовать открыть настройки через вызов `Intent` с определенным компонентом, если вы знаете точный путь к нужной активности.

Вот пример того, как можно попробовать вызвать кастомные настройки через `Intent`:

```java
Intent intent = new Intent();
intent.setAction("com.android.settings.PRINTER_SETTINGS");
startActivity(intent);
```

Некоторые производители могут использовать различные названия для своих активити, поэтому выводить список известных интентов может быть полезно:

1. `com.android.settings.PRINTER_SETTINGS`
2. `com.android.settings.Settings$PrintSettingsActivity`
3. `com.android.settings/.print.PrintSettingsActivity`

Попробуйте различные комбинации команд, чтобы найти тот, который работает на вашем устройстве. 

Если это не помогает, возможно, вам будет лучше обратиться к документации Realme или на форумах разработчиков, чтобы узнать, есть ли у кого-то другой опыт с этой проблемой и каким образом они ее решили.
Пришлось писать такой велосипед. 
Если для события есть, несколько получателей, то использовать первый из тех, что не совпадает со штатным
PackageManager packageManager = requireActivity().getPackageManager();
Intent intent = new Intent(Settings.ACTION_PRINT_SETTINGS);

 List<ResolveInfo> resolveInfos = packageManager.queryIntentActivities(intent,
                    PackageManager.GET_RESOLVED_FILTER);

            try {
                if (resolveInfos.size() > 1) {
                    for (ResolveInfo resolveInfo : resolveInfos) {
                        if (resolveInfo.activityInfo != null) {
                            String packageName = resolveInfo.activityInfo.applicationInfo.packageName;
                            if (!"com.android.settings".equals(packageName)) {
                                intent.setPackage(packageName);
                                break;
                            }
                        }
                    }
                }
            } catch (Exception ignored) {
            }

            try {
                startActivity(intent);
            } catch (Exception e) {
                Toast.makeText(requireActivity(), R.string.Oopppsss, Toast.LENGTH_SHORT).show();
            }
Похожие вопросы