2013-06-11 18 views
5

Mein Freund und ich entwickeln eine App, die synchronisierte Musik zwischen Android-Geräten mit wifi-direct streamt. Unser Problem ist, dass, während die App ziemlich gut funktioniert, wenn Telefone verbunden sind, es etwas Arbeit braucht, um die Telefone zu verbinden, da auf allen AOSP-Geräten wifi direct nur beim Aufruf des direkten Wi-Fi-Menüs eingeschaltet ist (und sofort beim Beenden geschlossen wird)). Dies macht eine In-Anwendung-Verbindung ziemlich schwierig. Wir haben uns gefragt, ob es irgendeinen Weg gibt, WiFi direkt vom Code aus einzuschalten und es weiter zu machen (wenn uns jemand eine detaillierte Beschreibung dazu geben könnte, wie man das mit Reflection macht, wäre das fantastisch).Keeping Wifi-Direct Einschalten von AOSP-Geräten

Danke! Hier ist unser aktueller Code:

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

Haben Sie einen Weg gefunden, Wifi Direct zu behalten? Ich habe das gleiche Problem, dass, sobald WLAN direkt beendet wird, ich manuell zu den Einstellungen gehen muss, um es einzuschalten. – windchime

+0

Nein, wir haben es nie herausgefunden. Hoffentlich haben die Android-Entwickler diese Funktionalität jetzt zugänglicher gemacht. – cbartondock

Antwort

0

Vielen Dank für diese Frage ... es ist eine Frage, die wir ringen haben mit, wie wir hinzufügen, WiFi Direct unsere App bietet.

Nach dem Durchsehen der Einstellungen auf mehreren Telefonen von verschiedenen Herstellern, und lesen Seiten wie this und this (die zwar nicht sehr präzise in den Details sind, aber es ist das Beste, was wir finden konnten), sind wir zu dem Schluss gekommen dass es nicht notwendig ist, WiFi Direct per se separat zu aktivieren: es ist aktiviert, wann immer WiFi aktiviert ist. Ihre App müsste also höchstens sein.

WiFi Direct Scannen (und die Sichtbarkeit gescannt werden) ist das, was Sie initiieren, indem Sie auf die Seite WiFi Direct-Einstellungen gehen.

die Seite verlassen kann das Scannen stoppen (wenn auch 3rd-Party appscananddo initiieren ihr eigenes Scanning), soll aber nicht WiFi direkt deaktivieren. Das würde überhaupt keinen Sinn ergeben ... wie du sagst, würde es für Apps schwierig machen (unmöglich), WiFi Direct zu verwenden, aber apps kann es erfolgreich verwenden. Was haben Sie gesehen, dass es so aussieht, als ob WiFi Direct deaktiviert wurde, als Sie diese Einstellungsseite verlassen haben?