Ich verwende WiFi P2P für network service discovery, und ich befolge die Anweisungen wie im Entwicklerhandbuch beschrieben. Hier ist der relevante Code in meiner Dienstklasse:WiFiDirect discoverServices bleibt mit Fehler 3 (NO_SERVICE_REQUESTS)
public void onCreate() {
manager = (WifiP2pManager) getSystemService(Context.WIFI_P2P_SERVICE);
channel = manager.initialize(this, getMainLooper(), null);
registerP2pService();
lookForServices();
}
private void registerP2pService() {
WifiP2pDnsSdServiceInfo serviceInfo =
WifiP2pDnsSdServiceInfo.newInstance("_service.name", "_presence._tcp", new HashMap<String, String>());
manager.addLocalService(channel, serviceInfo, new WifiP2pManager.ActionListener() {
@Override
public void onSuccess() {
Log.i("tag", "REGISTERED SERVICE");
}
@Override
public void onFailure(int arg0) {
Log.e("tag", "FAILED to register service");
}
});
}
private void setServiceListeners() {
WifiP2pDnsSdServiceRequest serviceRequest = WifiP2pDnsSdServiceRequest.newInstance();
manager.addServiceRequest(channel, serviceRequest,
new WifiP2pManager.ActionListener() {
@Override
public void onSuccess() {
Log.d("SCOPE", "Added a service request.");
discoverServices();
}
@Override
public void onFailure(int code) {
Log.e("tag", "Error adding service request.");
}
});
}
public void discoverServices() {
manager.discoverServices(channel, new WifiP2pManager.ActionListener() {
@Override
public void onSuccess() {
Log.d("tag", "Service discovery was initiated");
}
@Override
public void onFailure(int code) {
// This is where it keeps failing with error code 3 (NO_SERVICE_REQUESTS)
Log.d("SCOPE", "Service discovery failure code " + code);
}
});
}
Das erste Mal, dass ich meinen Dienst ausführen, nachdem das Telefon neu zu starten, Service Discovery ist ganz gut begonnen, aber wenn ich den Dienst töten, indem es von der App-Einstellungen Seite zu stoppen, dann öffne es wieder, es schlägt immer mit Fehlercode 3 fehl. Wenn ich mein Telefon neu starte und die App erneut starte, funktioniert es gut. Ich bin verwirrt, weil ich discoverServices nur dann explizit anrufe, wenn die Serviceanforderung erfolgreich hinzugefügt wurde.
Meine Vermutung ist, dass es an einem Code liegen kann, der nichts mit Service Discovery zu tun hat, da der Service Discovery Code extrem einfach zu sein scheint, aber wenn Sie irgendetwas falsch sehen, lassen Sie es mich wissen. Ich fasse hier Strohhalme.
Ich führe dies auf einem Nexus 5 mit Android 4.4.2.
wo Sie den Fehler zu erhalten? Ich meine, in welcher Methode? Wenn du dir [this] (http://developer.android.com/reference/android/net/wifi/p2p/WifiP2pManager.html#P2P_UNSUPPORTED) anschaust, würde ich sagen, dass deine setServiceListener-Methode nicht in Ordnung ist. Stoppen Sie Ihren Dienst onStop() oder irgendwo? –
Ich erhalte den Fehler im 'onFailure()' Callback von 'manager.discoverServices()'. Ich stoppe meinen Dienst nicht in 'onStop()' oder anderswo. –
Das ist wahrscheinlich der Fall. sieh dir [this] an (http://stackoverflow.com/questions/18679481/wifi-direct-end-connection-to-peer-on-android). So solltest du es tun. –