Задать вопрос
  • Две проблемы в приложении android?

    @naer_ok
    ну как то так ии отвечает )
    spoiler
    Понял вас. Вы столкнулись с двумя классическими ограничениями Android, которые невозможно решить стандартными средствами CustomTabsIntent. Вы не один такой, эти проблемы всплывают постоянно.

    Давайте разберемся, почему это происходит, и как обойти эти ограничения.

    Проблема 1: Почему приложение не переворачивается, если включена блокировка ориентации
    Вы используете requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE, но система это игнорирует.

    Причина: Начиная с Android 12, Google изменил политику безопасности. Если пользователь в настройках системы включил «Автоповорот» в положение «Заблокировано» (или зафиксировал портретный режим), система принудительно заставляет приложение следовать этому выбору пользователя, игнорируя программный код приложения. Это сделано для того, чтобы уважать предпочтения пользователя.

    Решение: Использовать специальный флаг, который «обманывает» систему и заставляет её игнорировать настройки пользователя.

    В Android есть флаг SCREEN_ORIENTATION_NOSENSOR или SCREEN_ORIENTATION_LOCKED в сочетании с некоторыми трюками. Но самый надежный способ — это Trusted Web Activity (TWA).

    Если вы используете TWA (а не просто Custom Tabs), то вы можете управлять ориентацией более жестко.

    Код для TWA (если решите перейти на него):

    kotlin
    // Вместо CustomTabsIntent используем TWA Launcher
    val launcher = TrustedWebActivityIntentBuilder(Uri.parse(url))
    .setScreenOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE)
    .build()
    launcher.launch(this)
    Этот подход дает приложению больше контроля, так как TWA — это не просто «вкладка», а полноценный режим отображения веб-контента.

    Проблема 2: Почему не получается скрыть адресную строку
    Вы пытались использовать builder.setUrlBarHidingEnabled(true) и enableUrlBarHiding(), но безуспешно.

    Причина: Эти методы не скрывают адресную строку навсегда. Они лишь разрешают ей исчезать при прокрутке страницы вниз. Как только пользователь прокрутит страницу вверх, адресная строка снова появится. Это сделано для безопасности, чтобы пользователь всегда знал, на каком сайте он находится (защита от фишинга).

    Фундаментальное ограничение: В стандартном CustomTabsIntent не существует способа полностью убрать адресную строку. Это невозможно.

    Решение: Единственный официальный способ скрыть адресную строку полностью — это Trusted Web Activity (TWA).

    TWA — это технология, которая позволяет открывать веб-сайт в полноэкранном режиме, как нативное приложение, без элементов интерфейса браузера (адресной строки, кнопок). Для этого нужно, чтобы ваш сайт поддерживал Digital Asset Links (то есть вы должны владеть доменом, который открываете, и разместить там специальный файл assetlinks.json).

    Как это выглядит в коде (TWA):

    kotlin
    // Требуется библиотека androidx.browser:browser
    val intent = TrustedWebActivityIntentBuilder(Uri.parse(url))
    .build()
    intent.launch(this)
    После настройки ассоциации сайта, TWA откроется на весь экран без адресной строки.

    Альтернативный путь: WebView
    Если TWA вам не подходит (например, сайт чужой, и вы не можете разместить assetlinks.json), то единственный способ получить полный контроль — это использовать WebView вместо CustomTabsIntent.

    WebView — это полноценный браузер внутри вашего приложения, и вы можете убрать все его элементы управления.

    Пример кода:

    kotlin
    class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    // Устанавливаем ориентацию
    requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE

    // Создаем WebView программно
    val webView = WebView(this)
    webView.settings.javaScriptEnabled = true
    webView.webViewClient = WebViewClient() // Чтобы ссылки открывались внутри
    webView.loadUrl("https://www.google.com")

    // Устанавливаем WebView как контент
    setContentView(webView)
    }
    }
    Этот способ дает вам полный контроль над интерфейсом (адресной строки вообще не будет), но он менее безопасен (пользователь не видит URL) и может не иметь всех функций современного браузера.

    Итог
    В вашем текущем подходе (Custom Tabs) эти две проблемы неразрешимы из-за политик безопасности Android и ограничений самой библиотеки.

    Что делать:

    Для скрытия адресной строки: Переходите на Trusted Web Activity (если сайт ваш) или на WebView (если сайт чужой).

    Для принудительного ландшафта: В TWA это решается через setScreenOrientation. В WebView вы можете просто игнорировать системные настройки, так как WebView — это часть вашего приложения.
    Написано
  • Сервер wireguard не видит локальную сеть, как решить проблему?

    @naer_ok
    Неужели нету доступа к ии
    spoiler
    Понял вашу задачу: вы хотите объединить две **локальные сети через WireGuard** (site-to-site), но у вас сейчас **только пингуется интерфейс wg0**, а доступ к локальным подсетям не работает. Судя по вашему конфигу, проблема связана с **маршрутизацией и NAT**. Давайте разберём по шагам.

    ---

    ### 1️⃣ Проблема с конфигом

    Ваш текущий конфиг на сервере выглядит так:

    ```ini
    [Interface]
    PrivateKey = Key
    Address = 10.10.10.1
    ListenPort = 51820
    PostUp = iptables -A FORWARD -i %i -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
    PostDown = iptables -D FORWARD -i %i -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE

    [Peer]
    PublicKey = key
    Endpoint = VDS_IP:51820
    AllowedIPs = 0.0.0.0/0
    PersistentKeepalive = 20
    ```

    **Что тут не так для site-to-site:**

    1. `AllowedIPs = 0.0.0.0/0` — это **маршрут всего трафика через WireGuard**, что используется для VPN “к Интернету через сервер”, а не для подключения локальных сетей.
    2. `PostUp` делает **маскарадинг для eth0** (т.е. NAT на интернет), что тоже не нужно, если цель — соединение двух локальных сетей напрямую.
    3. **Нет маршрутов к локальным сетям** на стороне VDS или клиентской стороны.

    ---

    ### 2️⃣ Пример правильной настройки site-to-site

    Допустим:

    * **Сеть A (на сервере VDS)**: 192.168.1.0/24
    * **Сеть B (на клиенте)**: 192.168.2.0/24
    * **WireGuard туннель**: 10.10.10.0/24

    #### Сервер (VDS) `/etc/wireguard/wg0.conf`:

    ```ini
    [Interface]
    PrivateKey = SERVER_PRIVATE_KEY
    Address = 10.10.10.1/24
    ListenPort = 51820

    # Разрешаем маршрутизацию между локальными сетями
    PostUp = sysctl -w net.ipv4.ip_forward=1
    PostDown = sysctl -w net.ipv4.ip_forward=0

    [Peer]
    PublicKey = CLIENT_PUBLIC_KEY
    AllowedIPs = 10.10.10.2/32, 192.168.2.0/24
    Endpoint = CLIENT_PUBLIC_IP:51820
    PersistentKeepalive = 25
    ```

    #### Клиент `/etc/wireguard/wg0.conf`:

    ```ini
    [Interface]
    PrivateKey = CLIENT_PRIVATE_KEY
    Address = 10.10.10.2/24

    [Peer]
    PublicKey = SERVER_PUBLIC_KEY
    AllowedIPs = 10.10.10.1/32, 192.168.1.0/24
    Endpoint = SERVER_PUBLIC_IP:51820
    PersistentKeepalive = 25
    ```

    ---

    ### 3️⃣ Что важно

    1. **IP forwarding** на обеих машинах:

    ```bash
    sudo sysctl -w net.ipv4.ip_forward=1
    ```

    2. **Маршруты на локальных машинах**:
    Например, на машине в сети 192.168.1.0/24 нужно добавить маршрут к 192.168.2.0/24 через туннель 10.10.10.2:

    ```bash
    sudo ip route add 192.168.2.0/24 via 10.10.10.2 dev wg0
    ```

    И на другой стороне зеркально.

    3. **NAT (MASQUERADE)** нужен только если вы хотите выход в интернет через туннель, а для site-to-site **лучше без NAT**, чтобы пакеты видели реальные локальные IP.

    ---

    Если хотите, я могу прямо написать **готовый рабочий конфиг для вашего случая с VDS + локальная сеть**, где будет всё: маршруты, iptables, IP forwarding — чтобы после запуска можно было пинговать локальные сети напрямую.

    Хотите, чтобы я это сделал?
    Написано
  • Что за треш произошел с Фигмой?

    @naer_ok
    Font installers ни когда вроде без него не работали шрифты
    Написано
  • Как подружить galaxy watch 8 с redmi note 8?

    @naer_ok
    adb пробывали
    adb shell cmd appops set com.samsung.android.app.watchmanager RUN_IN_BACKGROUND allow
    adb shell cmd appops set com.samsung.android.app.watchmanager RUN_ANY_IN_BACKGROUND allow
    adb shell cmd appops set com.samsung.android.app.watchmanager ACCESS_BACKGROUND_LOCATION allow
    Написано
  • Как установить NZXT cam?

    @naer_ok
    с сайта качает и без тора без впн с этого сайта https://nzxt.com/en-intl/pages/cam?srsltid=AfmBOoq...
    смотрите в сторону провайдера и да и какой впн используете ?
    Написано
  • Почему не работают ссылки Excel в Р7-Офис?

    @naer_ok
    ИИ не помог

    Использовать только UNC-пути:

    То, что работает: \\сервер\папка\файл.xlsx.

    Это единственный способ гарантированно, чтобы ссылку Р7-Офис открыл корректно в сети.

    Конвертировать относительные пути в абсолютные в Excel перед переносом:

    В Excel через Ctrl+K → редактировать ссылку → ввести полный UNC-путь.

    Можно сделать массово через формулу:
    =HYPERLINK("full_path_here","текст ссылки")
    Тогда Р7-Офис видит абсолютный путь и открывает файл.

    Если нужно оставить относительные пути (чего Р7-Офис не любит):

    Помещать все файлы в одну папку, тогда путь будет «относительный к файлу Excel» и должен работать.

    Но это редко удобно при больших сетевых хранилищах.

    Ярлыки и сетевые диски:

    Р7-Офис не умеет открывать .lnk или «виртуальные сетевые пути» в ссылках.

    Работает только если путь указан явно, т.е. UNC или локальный диск.
    Написано
  • Вырезан центр обновления Windows. Как установить обновления windows?

    @naer_ok
    WaterWalk, поизучай вот это должно получиться
    для примера choco install -y kb976932