2017-09-18 20 views
6

Chúng tôi đã sử dụng WifiManager API ẩn để bật chia sẻ kết nối Wifi và tạo điểm truy cập. Vấn đề bây giờ với API 26 trên Android là thẻ @RequiresPermission(android.Manifest.permission.TETHER_PRIVILEGED) đã được thêm vào setWifiApEnabled chức năng và bây giờ gọi đó trả về false và nhật ký sau đây được in:Cách bật Hotspot Wi-Fi Android O theo lập trình

W/WifiManager: PACKAGE_NAME gọi cố gắng setWifiApEnabled kích hoạt = true

Đọc các tài liệu mới, nó nói rằng chức năng bị phản đối và sẽ được loại bỏ trong một bản phát hành sắp tới và thay vào đó sử dụng ConnectivityManager#startTethering nếu người gọi có sự cho phép thích hợp nhưng phương pháp này có cùng một vấn đề không có quyền TETHER_PRIVILEGED. Một tùy chọn khác được trình bày trong tài liệu là sử dụng LocalOnlyHotspot nhưng điều này không được sử dụng cho dự án vì điểm phát sóng được tạo không có kết nối Internet.

Tôi cũng đã thử nghiệm với startSoftAp chức năng từ API ẩn nhưng không có kết quả thành công kể từ khi ngoại lệ sau đây được ném:

WifiService: Không sử dụng 10.164 cũng không quá trình hiện tại có android.permission.NETWORK_STACK

Có cách nào khác để kích hoạt điểm phát sóng Wifi trên các API mới hơn không? Tôi cũng đã tìm kiếm các lựa chọn thay thế cho Wifi tethering nhưng thay thế khả thi chỉ có vẻ là Bluetooth tethering với nhược điểm của chỉ nhận được tốc độ 3G. Wifi Aware và Wifi P2P cũng được xem xét nhưng những vấn đề này có kết nối Internet không được chia sẻ giữa các thiết bị.

Bất kỳ đề xuất nào về cách tiếp cận điều này?

+0

[https://stackoverflow.com/questions/45984345/how-to-turn-on-off-wifi-hotspot-programatically-in-android-8-0-oreo](https://stackoverflow.com/question/45984345/how-to-turn-on-off-wifi-hotspot-programatically-in-android-8-0-oreo) – Mark

+0

Bản sao có thể có của [Cách bật/tắt điểm phát sóng wifi có lập trình trong Android 8.0 (Oreo)] (https://stackoverflow.com/questions/45984345/how-to-turn-on-off-wifi-hotspot-programatically-in-android-8-0-oreo) – tripleee

Trả lời

1

Không, Trong Android O chúng đã tăng độ bảo mật, Vì vậy, bây giờ bạn không thể gọi "startTethering" qua phản chiếu vì nó yêu cầu OnStartTetheringCallback bị ẩn, vì vậy trừ khi bạn biên dịch một apk hệ thống với android build, bạn có thể sử dụng API. Bạn có thể sử dụng LocalOnlyHotspotCallback nếu bạn muốn

2

Điều này đã được trả lời nhiều lần. Như, Snehashish Agarwal nói, phương thức setWifiApEnabled() và startThethering() là các API riêng. Chúng được chú thích bằng @hide có nghĩa là chúng là riêng tư. Các ứng dụng của bên thứ ba không nên gọi trực tiếp các API riêng tư. Không có gì đảm bảo rằng họ sẽ làm việc trong tương lai. Như trong trường hợp của bạn.

Ngoài ra, startLocalOnlyHotspot sẽ không có quyền truy cập internet. Nó là một điểm nóng duy nhất tại địa phương để giao tiếp giữa các thiết bị kết nối với điểm truy cập Wifi và phương pháp này sẽ không có quyền truy cập Internet.

Hiện tại, không có cuộc gọi API chính thức nào để bật Điểm phát sóng di động.

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