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());
}
}
}
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
Nein, wir haben es nie herausgefunden. Hoffentlich haben die Android-Entwickler diese Funktionalität jetzt zugänglicher gemacht. – cbartondock