2014-12-05 22 views
5

Tôi đang cố gắng kết nối hai thiết bị bằng Wifi Direct, nhưng tôi muốn triển khai theo chương trình chứ không phải do người dùng khởi tạo.Tên thiết bị đổi tên Android cho wifi-trực tiếp

Và cho rằng tôi phải thay đổi tên WifiDirect của thiết bị giống như bên dưới hình ảnh:

enter image description here

Bây giờ khám phá các đồng nghiệp sử dụng phương pháp sau đây:

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

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

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

Kết nối ngang hàng đặc biệt qua đoạn mã sau:

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

     } 
    }); 
} 

Nhưng tôi không k bây giờ làm thế nào để thay đổi tên thiết bị cho Wi-Fi Direct?

+0

bạn có quản lý để tìm giải pháp cho việc này không? –

Trả lời

4

đây là những gì đã hiệu quả đối với tôi, mặc dù tôi không khuyên bạn sử dụng phản chiếu để truy cập các API ẩn trong WifiP2pManager.

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

người quản lý và kênh là gì? comeon trả lời tốt hơn. Quản lý – David

+3

là WifiP2pManager và kênh là WifiP2pManager.Channel mà chúng tôi sử dụng để kết nối ứng dụng của chúng tôi với khung công tác Wifi p2p. bằng cách này nếu bạn đã cố gắng để biết những điều cơ bản về WifiP2p hoặc thậm chí đọc một hướng dẫn duy nhất về cách bắt đầu, bạn sẽ biết người quản lý và kênh là gì, vui lòng tham khảo: http://developer.android.com/training/ connect-devices-wirelessly/wifi-direct.html –

+0

@David hai số này có thể được định nghĩa như sau 'WifiP2pManager manager = (WifiP2pManager) getSystemService (Context.WIFI_P2P_SERVICE); Kênh kênh = mManager.initialize (this, getMainLooper(), null); ' và đừng quên nhập khẩu những 'nhập khẩu android.net.wifi.p2p.WifiP2pManager;' ' nhập khẩu android.net. wifi.p2p.WifiP2pManager.Channel; ' – iko

Các vấn đề liên quan