2017-12-07 31 views
13

Trong ứng dụng Android của tôi Tôi đang sử dụng đoạn mã sau:Thay đổi WiFi hotspot trong Android Oreo 8.x

@RequiresApi(api = Build.VERSION_CODES.O) 
private void turnOnHotspot(){ 
    WifiManager manager = (WifiManager) getApplicationContext().getSystemService(Context.WIFI_SERVICE); 

    manager.startLocalOnlyHotspot(new WifiManager.LocalOnlyHotspotCallback(){ 

     @Override 
     public void onStarted(WifiManager.LocalOnlyHotspotReservation reservation) { 
      super.onStarted(reservation); 
      Log.d(TAG, "Wifi Hotspot is on now"); 
     } 

     @Override 
     public void onStopped() { 
      super.onStopped(); 
      Log.d(TAG, "onStopped: "); 
     } 

     @Override 
     public void onFailed(int reason) { 
      super.onFailed(reason); 
      Log.d(TAG, "onFailed: "); 
     } 
    },new Handler()); 
} 

Đoạn mã này tạo ra một hotspot tên giống như "AndroidShare_1234". Đối với một dự án của tôi, tôi cần phải có thể thiết lập một mật khẩu và SSID để điểm nóng này, tuy nhiên tôi không thể tìm thấy một cách để làm điều này. Tôi muốn tạo một điểm phát sóng có SSID như MyHotspot và mật khẩu tùy chỉnh.

Lưu ý rằng setWifiApEnabled không được hỗ trợ nữa trong Android O, đây là cách nó được thực hiện trong các phiên bản Android cũ hơn. Tuy nhiên, tôi vẫn cần lập trình để tạo một điểm truy cập wifi bằng SSID và mật khẩu. Tôi không thể tìm ra cách để làm điều này. Cảm ơn trước!

Đối với những người quan tâm ...:

Đối với một dự án trường học tôi đã thực hiện một thay đồ mà mở ra bất cứ khi nào nó có thể kết nối với mạng không dây với cridentials nhất định, vì vậy cần phải thiết lập một hotspot lập trình.

+0

Tôi không có câu trả lời cho bạn, nhưng bạn có cân nhắc sử dụng Bluetooth để thực hiện xác thực hoặc xuất bản SSID mạng không? – nitzanms

+0

Lưu ý rằng theo tài liệu của '' startLocalOnlyHotspot'', điểm phát sóng có thể được chia sẻ giữa một số ứng dụng. Điều này cho thấy rằng việc sửa đổi SSID dường như không được hỗ trợ chính thức. – nitzanms

Trả lời

2

Tôi chỉ có một giải pháp một phần cho vấn đề. Hy vọng rằng, nó sẽ là đủ cho các ứng dụng bạn đang thiết kế.

SSID và mật khẩu được mã hóa cứng bởi hệ thống Android khi bạn khởi động Hotspot. Bằng cách xem xét mã AOSP, tôi thấy rằng cùng một điểm phát sóng có thể được chia sẻ bởi nhiều ứng dụng. Cấu hình này cho điểm phát sóng này (tên lớp là WifiConfiguration) cũng được chia sẻ với tất cả các ứng dụng yêu cầu. Cấu hình này được truyền lại cho ứng dụng trong gọi lại onStarted(LocalOnlyHotspotReservation reservation). Bạn có thể nhận số WifiConfiguration bằng cách gọi reservation.getWifiConfiguration(). Bạn sẽ nhận được tất cả thông tin bạn cần từ đối tượng WifiConfiguration. Vì vậy, bạn có thể đọc Khóa chia sẻ trước và tên điểm truy cập. Nhưng tôi không nghĩ rằng bạn có thể thay đổi chúng


FYI, Mã có liên quan thiết lập cấu hình wifi (bao gồm cả các SSID mã hóa cứng và chìa khóa WPA2-PSK) được thực hiện bởi các đoạn mã sau đây

/** 
    * Generate a temporary WPA2 based configuration for use by the local only hotspot. 
    * This config is not persisted and will not be stored by the WifiApConfigStore. 
    */ 
    public static WifiConfiguration generateLocalOnlyHotspotConfig(Context context) { 
     WifiConfiguration config = new WifiConfiguration(); 
     config.SSID = context.getResources().getString(
       R.string.wifi_localhotspot_configure_ssid_default) + "_" 
         + getRandomIntForDefaultSsid(); 
     config.allowedKeyManagement.set(KeyMgmt.WPA2_PSK); 
     config.networkId = WifiConfiguration.LOCAL_ONLY_NETWORK_ID; 
     String randomUUID = UUID.randomUUID().toString(); 
     // first 12 chars from xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx 
     config.preSharedKey = randomUUID.substring(0, 8) + randomUUID.substring(9, 13); 
     return config; 
    } 
Các vấn đề liên quan