Как программно включить точку доступа Android O WiFi

Мы использовали скрытый API WifiManager, чтобы включить модем Wi-Fi и создать точку доступа. Проблема теперь с API 26 на Android заключается в том, что тег @RequiresPermission(android.Manifest.permission.TETHER_PRIVILEGED) был добавлен к функции setWifiApEnabled, и теперь этот вызов возвращает false, и печатается следующий журнал:

W / WifiManager: PACKAGE_NAME попытался вызвать setWifiApEnabled enabled = true

Читая новую документацию, он говорит, что функция устарела и будет удалена в следующем выпуске, и вместо этого будет использоваться ConnectivityManager#startTethering, если у вызывающего есть соответствующие разрешения, но этот подход имеет ту же проблему без разрешений TETHER_PRIVILEGED. Еще один вариант, представленный в документации, - это использование LocalOnlyHotspot, но это бесполезно для проекта, поскольку созданная точка доступа не имеет подключения к Интернету.

Я также тестировал функцию startSoftAp из скрытого API, но безуспешно, поскольку возникает следующее исключение:

WifiService: ни у пользователя 10164, ни у текущего процесса нет android.permission.NETWORK_STACK

Есть ли обходной путь для активации точки доступа Wi-Fi на новых API? Я также искал альтернативы Wifi-модему, но, похоже, единственной жизнеспособной альтернативой является Bluetooth-модем, недостатком которого является только скорость 3G. Wifi Aware и Wifi P2P также рассматривались, но у них есть проблема, связанная с тем, что подключение к Интернету не разделяется между устройствами.

Есть предложения о том, как к этому подойти?


person Tiago Ferreira    schedule 18.09.2017    source источник


Ответы (2)


На это ответили много раз. Как сказал Снехашиш Агарвал, методы setWifiApEnabled () и startThethering () являются частными API. Они помечены @hide, что означает, что они частные. Сторонние приложения не должны напрямую вызывать частные API. Нет никакой гарантии, что они будут работать в будущем. Как и в вашем случае.

Кроме того, startLocalOnlyHotspot не будет иметь доступа в Интернет. Это локальная точка доступа для связи между устройствами, подключенными к точке доступа Wi-Fi, и этот метод не будет иметь доступа в Интернет.

В настоящее время нет официального вызова API для включения мобильной точки доступа.

person Android4Fun    schedule 16.11.2017

Нет, в Android O они имеют повышенную безопасность, поэтому теперь вы не можете вызвать startTethering через отражение, поскольку для этого требуется OnStartTetheringCallback, который скрыт, поэтому, если вы не скомпилируете системный apk со сборкой Android, вы можете использовать API. Вы можете использовать LocalOnlyHotspotCallback, если хотите

person Snehashish Agarwal    schedule 10.11.2017