Android 将设备名称重命名为 wifi-direct

Posted

技术标签:

【中文标题】Android 将设备名称重命名为 wifi-direct【英文标题】:Android rename device's name for 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 的设备名称?

【问题讨论】:

您找到解决方案了吗? 【参考方案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;

以上是关于Android 将设备名称重命名为 wifi-direct的主要内容,如果未能解决你的问题,请参考以下文章

如何以编程方式重命名 Android 应用程序?

wget:: 如何将所有已下载的文件重命名为 wget --content-disposition 给出的名称?

计划批处理文件不将文件重命名为使用 %date% 和 %time% 变量指定的名称

如何在android中删除包?

sh 使用bash和linux工具将文件夹中的文件重命名为文件夹名称。

如何解压其中只有一个目录的存档并将其重命名为常量名称