【问题标题】:Android rename device's name for wifi-directAndroid 将设备名称重命名为 wifi-direct
【发布时间】:2014-12-05 11:44:09
【问题描述】:

我正在尝试使用 Wifi Direct 连接两个设备,但我想以编程方式实现,而不是由用户发起。

为此,我必须更改设备的 WifiDirect 名称,如下图所示:

现在使用以下方法发现对等点:

wifiP2pManager.discoverPeers(channel,
                new WifiP2pManager.ActionListener() {

                    @Override
                    public void onSuccess() {
                        Log.d(TAG, "onSuccess");
                    }

                    @Override
                    public void onFailure(int reason) {
                        Log.d(TAG, "onFailure");
                    }
                });

通过以下代码连接到特定对等点:

public static void connectPeer(WifiP2pDevice device,
        WifiP2pManager manager, Channel channel, final Handler handler) {

    WifiP2pConfig config = new WifiP2pConfig();
    config.groupOwnerIntent = 15;
    config.deviceAddress = device.deviceAddress;
    config.wps.setup = WpsInfo.PBC;

    manager.connect(channel, config, new ActionListener() {

        @Override
        public void onSuccess() {

        }

        @Override
        public void onFailure(int reason) {

        }
    });
}

但我不知道如何更改 Wi-Fi Direct 的设备名称?

【问题讨论】:

  • 您找到解决方案了吗?

标签: android wifi-direct


【解决方案1】:

这对我有用,尽管我不建议使用反射来访问 WifiP2pManager 中的隐藏 API。

public void setDeviceName(String devName) {
    try {
        Class[] paramTypes = new Class[3];
        paramTypes[0] = Channel.class;
        paramTypes[1] = String.class;
        paramTypes[2] = ActionListener.class;
        Method setDeviceName = manager.getClass().getMethod(
                "setDeviceName", paramTypes);
        setDeviceName.setAccessible(true);

        Object arglist[] = new Object[3];
        arglist[0] = channel;
        arglist[1] = devName;
        arglist[2] = new ActionListener() {

            @Override
            public void onSuccess() {
                LOG.debug("setDeviceName succeeded");
            }

            @Override
            public void onFailure(int reason) {
                LOG.debug("setDeviceName failed");
            }
        };

        setDeviceName.invoke(manager, arglist);

    } catch (NoSuchMethodException e) {
        e.printStackTrace();
    } catch (IllegalAccessException e) {
        e.printStackTrace();
    } catch (IllegalArgumentException e) {
        e.printStackTrace();
    } catch (InvocationTargetException e) {
        e.printStackTrace();
    }

}

【讨论】:

  • manager 是 WifiP2pManager,channel 是 WifiP2pManager.Channel,我们使用它来将我们的应用程序连接到 Wifi p2p 框架。顺便说一句,如果您尝试了解有关 WifiP2p 的基础知识,甚至阅读有关如何开始的单个教程,您就会知道经理和频道是什么,请参考:developer.android.com/training/connect-devices-wirelessly/…
  • @David 这两个可以定义如下WifiP2pManager manager = (WifiP2pManager) getSystemService(Context.WIFI_P2P_SERVICE); Channel channel = mManager.initialize(this, getMainLooper(), null);,别忘了导入这些import android.net.wifi.p2p.WifiP2pManager;import android.net.wifi.p2p.WifiP2pManager.Channel;
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多