uni-app 手机连接Ap 获取Ap的Mac地址或者Ap唯一信息

发布于 1周前 作者 caililin 来自 Uni-App

uni-app 手机连接Ap 获取Ap的Mac地址或者Ap唯一信息

通过H5获取到手机连接Ap的Mac地址。

5 回复

明白你意思,可以做, 专业插件开发 Q:1196097915

已经有现成的插件,联系QQ:1804945430

地下停车场,没有Gps信号,但是有部署好的Ap,想通过Ap获取当前人所在位置,所以需要通过手机端获取到Ap的唯一信息,再根据这个唯一信息查询出对应的停车场位置。

在uni-app中获取连接到AP(Access Point,无线接入点)的MAC地址或AP的唯一信息,涉及到访问设备的底层网络状态,这在多数移动操作系统(如iOS和Android)上都受到严格的权限和安全限制。特别是在iOS上,获取MAC地址已经不被允许,而Android从Android 6.0(API 级别 23)开始也对获取WiFi扫描结果的MAC地址进行了限制。

尽管如此,我们可以通过一些变通的方法来获取AP的一些信息,比如BSSID(MAC地址,尽管可能被隐藏或模糊处理),SSID(WiFi名称)等。以下是一个基于uni-app和原生插件的示例,展示如何在Android上尝试获取这些信息(注意,iOS上可能无法获取MAC地址)。

1. 使用uni-app的插件机制

首先,你需要一个原生插件来获取WiFi扫描结果。这里假设你已经创建了一个原生插件,或者你可以使用现有的插件,比如uni-app-wifi-info(假设名称,实际使用时需查找或自行开发)。

2. Android原生代码示例

在你的Android原生插件中,可以添加如下代码来获取WiFi扫描结果:

import android.Manifest;
import android.content.Context;
import android.content.pm.PackageManager;
import android.net.wifi.ScanResult;
import android.net.wifi.WifiManager;
import android.util.Log;
import io.dcloud.feature.uniapp.bridge.UniJSCallback;

public class WifiInfoPlugin {
    public void getWifiInfo(Context context, UniJSCallback callback) {
        if (context.checkCallingOrSelfPermission(Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
            callback.invokeAndKeepAlive("Permission denied");
            return;
        }
        WifiManager wifiManager = (WifiManager) context.getApplicationContext().getSystemService(Context.WIFI_SERVICE);
        if (wifiManager != null && wifiManager.isWifiEnabled()) {
            wifiManager.startScan();
            List<ScanResult> results = wifiManager.getScanResults();
            for (ScanResult result : results) {
                Log.d("WifiInfo", "SSID: " + result.SSID + ", BSSID: " + result.BSSID);
                // 通过callback将结果返回给uni-app
                callback.invokeAndKeepAlive(result.SSID, result.BSSID);
            }
        } else {
            callback.invokeAndKeepAlive("WiFi is not enabled");
        }
    }
}

3. 在uni-app中调用插件

在你的uni-app代码中,你可以这样调用插件:

uni.requireNativePlugin('WifiInfoPlugin').getWifiInfo((result) => {
    console.log('SSID:', result[0], 'BSSID:', result[1]);
});

注意

  • 获取WiFi扫描结果和BSSID在iOS上受限,可能无法直接获取。
  • 在Android上,从Android 10(API 级别 29)开始,即使获取到BSSID,也可能被模糊处理(如使用随机化的MAC地址)。
  • 确保你的应用有适当的权限声明和运行时权限请求逻辑。
回到顶部