При вызове интента для перехода к настройкам службы печати на телефонах Realme активити открывается, однако при попытке изменить статус службы (включить/выключить) возникает ошибка в прошивке. В частности, возникает исключение `java.lang.NullPointerException` при попытке вызвать метод `setMaxWidth` на объекте, который равен нулю. Это связано с тем, что разработчики не учли изменения в лайте активити при портировании, что приводит к открытию устаревшей версии раздела для совместимости. Поскольку в стандартных настройках предлагается аналог в оболочке Realme UI, можно ли узнать о вендорном аналоге, который позволяет попасть к нужной части настроек?
К сожалению, существует несколько версий 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(); }