无法在 Android 11 (Wi-Fi Direct) 上使用 WifiP2pManager.setDeviceName

Posted

技术标签:

【中文标题】无法在 Android 11 (Wi-Fi Direct) 上使用 WifiP2pManager.setDeviceName【英文标题】:Cannot use WifiP2pManager.setDeviceName on Android 11 (Wi-Fi Direct) 【发布时间】:2021-05-05 09:11:16 【问题描述】:

我和我的团队正在 Android 设备上使用 Wi-Fi Direct 技术。到目前为止,使用的设备都是 android 8、9 和 10。我们可以通过 WifiP2pManager.setDeviceName 方法更改设备的 Wifi P2P 设备名称。

很遗憾,从 Android 11 开始,如果没有系统权限,就无法调用此方法。

我来这里是想问你是否有解决方案以编程方式更改非 root 的 Android 11 设备的 WifiP2p 设备名称。

如果没有,Android 8 是否支持 Wi-Fi Direct(蓝牙除外)的替代方案,您可以在该设备上启动两个(或多个)设备之间的连接、以编程方式通信和发送文件没有连接到互联网?

谢谢

【问题讨论】:

【参考方案1】:

也许现在为时已晚,但以防万一: 我们不得不使用反射来更改我们的设备名称。 我们正在使用这个实现:

public void setDeviceName(String name) 

        if(name.length() > 32)  // Name size limit is 32 chars.
            name = name.substring(0, 32);
        

        Class[] paramTypes = new Class[3];
        paramTypes[0] = WifiP2pManager.Channel.class;
        paramTypes[1] = String.class;
        paramTypes[2] = WifiP2pManager.ActionListener.class;
        Object[] argList = new Object[3];
        argList[0] = mChannel; // Your current channel
        argList[1] = name;
        argList[2] = new WifiP2pManager.ActionListener() 
            @Override
            public void onSuccess() 
                Log.d(TAG, "Wifi name successfully set to " + name);
            

            @Override
            public void onFailure(int reason) 
                Log.e(TAG, "Device name set failed: reason = " + reason);
            
        ;

        try 
            Method setDeviceNameMethod = WifiP2pManager.class.getMethod("setDeviceName", paramTypes);
            setDeviceNameMethod.setAccessible(true);
            setDeviceNameMethod.invoke(mWifiP2pMgr, argList);
         catch (NoSuchMethodException | IllegalAccessException | InvocationTargetException |
                IllegalArgumentException e) 
            Log.e(TAG, "Exception while trying to set device name.\n" + e.toString());
        
    

【讨论】:

以上是关于无法在 Android 11 (Wi-Fi Direct) 上使用 WifiP2pManager.setDeviceName的主要内容,如果未能解决你的问题,请参考以下文章

android 2.2 模拟器 -- 无法加载 Wi-Fi 驱动程序

Android Wi-Fi Display(Miracast)介绍

Android Wi-Fi Display(Miracast)介绍

在热点模式下扫描 Android 上的 Wi-Fi 接入点

同时使用 Android 以太网和 Wi-Fi

Android Wi-Fi Display(Miracast)介绍