2013-06-11 6 views
5

Wraz z przyjacielem opracowujemy aplikację, która przesyła zsynchronizowaną muzykę między urządzeniami z Androidem za pomocą Wi-Fi Direct. Naszym problemem jest to, że chociaż aplikacja działa dość dobrze, gdy telefony są ze sobą połączone, niektóre telefony komórkowe wymagają połączenia, ponieważ na wszystkich urządzeniach AOSP wydaje się, że funkcja Wi-Fi Direct jest włączona tylko po wejściu do bezpośredniego menu Wi-Fi (i natychmiast po zamknięciu jest natychmiast zamykana)). To sprawia, że ​​połączenie w aplikacji jest raczej trudne. Zastanawialiśmy się, czy istnieje jakikolwiek sposób, aby włączyć wifi bezpośrednio z kodu i zachować go (jeśli ktoś mógłby nam polecić dokładny opis, jak to zrobić, używając Reflection, który byłby fantastyczny).Obsługa urządzeń AOSP podłączonych do sieci Wi-Fi

Dzięki! Oto nasz aktualny kod:

public class Reflector { 
static Method turnOnICS; 
static Method turnOnJB; 
static Method turnOffICS; 

public static void turnOnP2P(WifiP2pManager m, Channel c) { 
    //Log.v("button", "turnOnP2P"); 
    if (android.os.Build.VERSION.SDK_INT == 14 || android.os.Build.VERSION.SDK_INT == 15) { 
     //Log.v("version", "Version is ICS"); 
     try { 
      turnOnICS = WifiP2pManager.class.getDeclaredMethod("enableP2p",WifiP2pManager.Channel.class); 
      turnOnICS.setAccessible(true); 
      turnOnICS.invoke(m, c); 
     } catch (NoSuchMethodException e) { 
      Log.v("ics_error", "ICS enableP2p() not found"); 
     } catch (Exception e) { 
      Log.v("ics_error", "turnOnICS invocation failure"); 
     } 
    } else if (android.os.Build.VERSION.SDK_INT == 16 || android.os.Build.VERSION.SDK_INT == 17) { 
     //Log.v("version", "Version is JB"); 
     try { 
      turnOnJB = NsdManager.class.getDeclaredMethod("setEnabled", boolean.class); 
      turnOnJB.setAccessible(true); 
      turnOnJB.invoke(NsdManager.class, true); 
      //must feed it an nsdmanager, but none exists in wifidirectactivity 
      Log.v("nsd", "problem"); 
     } catch (NoSuchMethodException e) { 
      Log.v("jb_error", "JB setEnabled() not found"); 
     } catch (Exception e) { 
      Log.v("jb_error", "turnOnJB invocation failure"); 
      e.printStackTrace(); 
     } 
    } 
} 

public static void turnOffP2P(WifiP2pManager m, Channel c) { 
    //Log.v("button", "turnOffP2P"); 
    if (android.os.Build.VERSION.SDK_INT == 14 || android.os.Build.VERSION.SDK_INT == 15) { 
     //Log.v("version", "Version is ICS"); 
     try { 
      turnOffICS = WifiP2pManager.class.getDeclaredMethod("disableP2p", WifiP2pManager.Channel.class); 
      turnOffICS.setAccessible(true); 
      turnOffICS.invoke(m, c); 
     } catch (NoSuchMethodException e) { 
      Log.v("ics_error", "ICS disableP2P() not found"); 
     } catch (Exception e) { 
      Log.v("ics_error", "turnOffICS invocation failure"); 
     } 
    } 
} 

public static void printAll(){ 
    Method[] list = WifiP2pManager.class.getDeclaredMethods(); 
    for(Method m : list){ 
     Log.v("tag",m.getName()); 
    } 
} 

}

+0

Czy znalazłeś sposób, aby utrzymać Wifi Direct na? Mam taki sam problem, że po bezpośrednim wyjściem wifi, muszę ręcznie przejść do ustawień, aby go włączyć. – windchime

+0

Nie, nigdy tego nie odkryliśmy. Mam nadzieję, że twórcy Androida już teraz udostępnili tę funkcjonalność. – cbartondock

Odpowiedz

0

Dziękuję za tym pytaniem ... to było pytanie, które już zmagają się z jak dodamy Wi-Fi Direct wyposażony do naszej aplikacji.

Po przejrzeniu ustawień na kilku telefonach różnych producentów i przeczytaniu stron takich jak this i this (które wprawdzie nie są zbyt szczegółowe w szczegółach, ale jest to najlepsze, jakie mogliśmy znaleźć), doszliśmy do wniosku że nie ma potrzeby osobnego włączania Wi-Fi Direct per se: jest włączony, gdy włączone jest WiFi. Tak więc, co najwyżej Twoja aplikacja musiałaby być turn on WiFi.

Jednakże, WiFi Direct skanowanie (i widoczność do zeskanowania) jest tym, co zainicjowałeś, przechodząc do strony ustawień Wi-Fi Direct.

Pozostawienie tej strony mogą przerwać skanowanie (choć 3rd-party appscananddo inicjować własne skanowanie), ale nie należy wyłączyć Wi-Fi Direct. Wcale to nie ma sensu ... jak mówisz, utrudni to (niemożliwe) aplikacjom korzystanie z WiFi Direct, ale apps z powodzeniem. Co widziałeś, że wyglądało na to, że Wi-Fi Direct zostało wyłączone po opuszczeniu tej strony ustawień?

Powiązane problemy