2014-12-05 54 views
5

我想连接两个使用Wifi Direct的设备,但我想以编程方式而不是由用户发起。Android重命名设备的名称为wifi-direct

为此,我不得不改变设备的Wi-Fi直连的名称,如下面的图片:通过下面的代码

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

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

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

连接到特定的同行:

enter image description here

使用下面的方法现在发现对等

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) { 

     } 
    }); 
} 

但我没有k现在如何更改Wi-Fi Direct的设备名称?

+0

您是否设法找到解决方案? – 2014-12-28 13:26:16

回答

4

即使我不建议使用反射来访问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(); 
    } 

} 
+0

经理和渠道是什么? comeon回答更好。 – David 2015-09-28 05:49:14

+3

经理是WifiP2pManager,通道是WifiP2pManager.Channel,我们用它将我们的应用程序连接到Wifi p2p框架。顺便说一下,如果您试图了解关于WifiP2p的基础知识,或者甚至阅读关于如何开始的单个教程,您就会知道经理和渠道是什么,请参阅以下内容:http://developer.android.com/training/ connect-devices-wirelessly/wifi-direct.html – 2015-09-30 14:39:26

+0

@David这两个可以定义如下: 'WifiP2pManager manager =(WifiP2pManager)getSystemService(Context.WIFI_P2P_SERVICE); 频道信道= mManager.initialize(此,getMainLooper(),NULL);' 不要忘记进口这些 '进口android.net.wifi.p2p.WifiP2pManager;'' 进口android.net。 wifi.p2p.WifiP2pManager.Channel;' – iko 2017-03-05 13:30:37