Могу ли я включить WiFi-Direct из кода? на Android API-14 (ICS) - PullRequest
13 голосов
/ 20 декабря 2011

Я использую новый API Wi-Fi Direct от Google на Android 4.0, и в примере кода они отправляют пользователя в Настройки, чтобы активировать режим WiFi-Direct.

Есть ли способ запустить егопо коду ???

все, что они предлагают - это прослушать намерение WIFI_P2P_STATE_CHANGED_ACTION, а затем использовать этот код

String action = intent.getAction();

if (WifiP2pManager.WIFI_P2P_STATE_CHANGED_ACTION.equals(action)) {

   // UI update to indicate wifi p2p status.
   int state = intent.getIntExtra(WifiP2pManager.EXTRA_WIFI_STATE, -1);

   if (state == WifiP2pManager.WIFI_P2P_STATE_ENABLED) {
       // Wifi Direct mode is enabled

   } else {
       // Wifi Direct mode is disabled
   }

Ответы [ 3 ]

13 голосов
/ 31 октября 2012

Да, есть способ использовать отражение. Работает на моем GSII (и не работает изящно на HTC Wifi без Wi-Fi Direct), но это отражение может работать не на всех телефонах.

p2pManager = (WifiP2pManager) getSystemService(WIFI_P2P_SERVICE);
channel = p2pManager.initialize(getApplicationContext(),
        getMainLooper(), null);

try {
    Class<?> wifiManager = Class
            .forName("android.net.wifi.p2p.WifiP2pManager");

    Method method = wifiManager
            .getMethod(
                "enableP2p",
                new Class[] { android.net.wifi.p2p.WifiP2pManager.Channel.class });

    method.invoke(p2pManager, channel);

} catch (Exception e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
}

Обратите внимание:

В Jelly Bean и выше, когда вы пытаетесь использовать API WifiP2pManager, WiFi-Direct включается автоматически (до тех пор, пока включен WiFi), поэтому нет необходимости использовать этот хак.

2 голосов
/ 20 декабря 2011

Нет, все, что вы можете сделать, это уведомить пользователя о включении WiFi.

0 голосов
/ 04 января 2018

На некоторых устройствах, хотя Wi-Fi direct поддерживается, он не включен из-за некоторых системных ошибок. Вот более надежный способ проверить, включен ли он (к сожалению, для него требуется root) с помощью Kotlin.

val matcher = "^mNetworkInfo .* (isA|a)vailable: (true|false)"
    .toPattern(Pattern.MULTILINE)
    .matcher(su("dumpsys ${Context.WIFI_P2P_SERVICE}"))
if (!matcher.find()) return "Root unavailable"
if (matcher.group(2) != "true") return "Wi-Fi Direct unavailable"
return "Wi-Fi Direct available"

Это должно работать для Android 4.3 - 8.1. Проверьте исходный код ниже:

...