检测MDNS / Zeroconf设备适用于Android 5.1.1但不适用于Android 7

时间:2018-03-22 18:42:08

标签: android cordova telnet zeroconf mdns

我正在检测没有互联网访问权限的专用网络上的设备。网络上唯一的设备是我正在检测的设备以及我正在使用的应用程序的移动设备或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);
        });
    });
}

我原本以为可能是因为权限所以我将其添加到Cordova Android项目中的MainActivity。我可以看到日志“有权限”。

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);
    }
}

1 个答案:

答案 0 :(得分:0)

我最终重做了插件以使用Android's Network Service Discovery (NSD)。我能够使用它。对于我的生活,我不知道为什么这个插件对我不起作用。我从来没有找到导致它无法工作的原因。