2014-12-05 4 views
5

Wifi Direct를 사용하여 두 장치를 연결하려고하는데 사용자가 시작하지 않고 프로그래밍 방식으로 구현하려고합니다. 다음 코드를 통해 특정 피어wifi-direct 용 안드로이드 이름 바꾸기 장치의 이름

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

     } 
    }); 
} 

하지만 이제 Wi-Fi Direct의 기기 이름을 변경하는 방법은 무엇입니까?

+0

해결 방법을 찾으셨습니까? –

답변

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

+3

관리자는 WifiP2pManager이며 채널은 WifiP2p 프레임 워크에 앱을 연결하는 데 사용하는 WifiP2pManager.Channel입니다. WifiP2p에 대한 기본 사항을 알기 시작하거나 시작하는 방법에 대한 단일 자습서를 읽으 려했다면 관리자와 채널이 무엇인지 알 수 있습니다. 다음을 참조하십시오. http://developer.android.com/training/ connect-devices-wirelessly/wifi-direct.html –

+0

@David이 두 가지는 다음과 같이 정의 할 수 있습니다. 'WifiP2pManager manager = (WifiP2pManager) getSystemService (Context.WIFI_P2P_SERVICE); 채널 채널 (널 (null)이, getMainLooper()) = mManager.initialize,' 과 수입이 '수입 android.net.wifi.p2p.WifiP2pManager을 잊지 않는다' '수입 android.net. wifi.p2p.WifiP2pManager.Channel; – iko

관련 문제