检测 MDNS/Zeroconf 设备适用于 Android 5.1.1 但不适用于 Android 7
Detecting MDNS/Zeroconf device works on Android 5.1.1 but not on Android 7
我在无法访问互联网的专用网络上检测到一台设备。网络上唯一的设备是我正在检测的设备以及具有我当前正在使用的应用程序的移动设备或 PC。这句话在 Android 5.1.1 上很好,但在 7 上,我没有得到任何回应,就像它没有找到任何东西一样。这是我用来检测设备的代码。我使用的类型是 _telnet._tcp.
而我这里使用的 Cordova 插件是 cordova-plugin-zeroconf
find(type) {// javascript
return new Promise((resolve, reject) => {
cordova.plugins.zeroconf.watch(type, "local.", (result) => {
var action = result.action;
var service = result.service;
if (action == 'added') {
console.debug('service added', service);
}
else if (action == 'resolved') {
console.debug('service resolved', service);
resolve({ status: "resolved", service: service });
}
else {
console.debug('service removed', service);
resolve({ status: "removed", service: service });
}
}, (error) => {
reject(error);
});
});
}
我本来以为可能是权限问题所以把这个加到CordovaAndroid项目中的MainActivity
。我可以看到它记录 "has permission".
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {//java
Log.d(TAG, "version 23 or more");
if (checkSelfPermission(Manifest.permission.ACCESS_WIFI_STATE) == PackageManager.PERMISSION_GRANTED &&
checkSelfPermission(Manifest.permission.CHANGE_WIFI_MULTICAST_STATE) == PackageManager.PERMISSION_GRANTED &&
checkSelfPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED) {
Log.d(TAG, "has permission");
}
else {
Log.d(TAG, "no permission");
requestPermissions(new String[] { Manifest.permission.ACCESS_WIFI_STATE,
Manifest.permission.CHANGE_WIFI_MULTICAST_STATE,
Manifest.permission.WRITE_EXTERNAL_STORAGE }, 0);
}
}
我最终重做了插件以利用 Android's Network Service Discovery (NSD)。我能够让它与它一起工作。对于我的生活,我不知道为什么插件不适合我。我从来没有找出是什么导致它不起作用。
我在无法访问互联网的专用网络上检测到一台设备。网络上唯一的设备是我正在检测的设备以及具有我当前正在使用的应用程序的移动设备或 PC。这句话在 Android 5.1.1 上很好,但在 7 上,我没有得到任何回应,就像它没有找到任何东西一样。这是我用来检测设备的代码。我使用的类型是 _telnet._tcp.
而我这里使用的 Cordova 插件是 cordova-plugin-zeroconf
find(type) {// javascript
return new Promise((resolve, reject) => {
cordova.plugins.zeroconf.watch(type, "local.", (result) => {
var action = result.action;
var service = result.service;
if (action == 'added') {
console.debug('service added', service);
}
else if (action == 'resolved') {
console.debug('service resolved', service);
resolve({ status: "resolved", service: service });
}
else {
console.debug('service removed', service);
resolve({ status: "removed", service: service });
}
}, (error) => {
reject(error);
});
});
}
我本来以为可能是权限问题所以把这个加到CordovaAndroid项目中的MainActivity
。我可以看到它记录 "has permission".
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {//java
Log.d(TAG, "version 23 or more");
if (checkSelfPermission(Manifest.permission.ACCESS_WIFI_STATE) == PackageManager.PERMISSION_GRANTED &&
checkSelfPermission(Manifest.permission.CHANGE_WIFI_MULTICAST_STATE) == PackageManager.PERMISSION_GRANTED &&
checkSelfPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED) {
Log.d(TAG, "has permission");
}
else {
Log.d(TAG, "no permission");
requestPermissions(new String[] { Manifest.permission.ACCESS_WIFI_STATE,
Manifest.permission.CHANGE_WIFI_MULTICAST_STATE,
Manifest.permission.WRITE_EXTERNAL_STORAGE }, 0);
}
}
我最终重做了插件以利用 Android's Network Service Discovery (NSD)。我能够让它与它一起工作。对于我的生活,我不知道为什么插件不适合我。我从来没有找出是什么导致它不起作用。