2011-11-04 49 views
5

Tôi có thể kiểm tra trình thông báo có lập trình trên thiết bị Android đã kích hoạt tính năng chia sẻ kết nối không?Có cách nào để kiểm tra xem hoạt động chia sẻ kết nối có đang hoạt động không?

Tôi vừa xem lớp WifiManager. Tất cả vatraibles từ WifiInfo hiển thị các giá trị giống như iff WIFI được tắt trên thiết bị.

Thnaks, Trân

+0

Chức năng chia sẻ kết nối nằm trong Conne ctivityManager class, nhưng ẩn và không có trong API công khai. Nếu bạn dự định sử dụng "API chưa được xuất bản", bạn sẽ cần một JAR framework đã được sửa đổi hoặc sử dụng sự phản chiếu. Phương thức mà bạn đang tìm kiếm có lẽ là String [] ConnectivityManager # getTetheredIfaces(), trả về các giao diện mạng hiện tại. – Jens

Trả lời

7

Hãy thử sử dụng phản chiếu, như vậy:

WifiManager wifi = (WifiManager) getSystemService(Context.WIFI_SERVICE); 
Method[] wmMethods = wifi.getClass().getDeclaredMethods(); 
for(Method method: wmMethods){ 
if(method.getName().equals("isWifiApEnabled")) { 

try { 
    method.invoke(wifi); 
} catch (IllegalArgumentException e) { 
    e.printStackTrace(); 
} catch (IllegalAccessException e) { 
    e.printStackTrace(); 
} catch (InvocationTargetException e) { 
    e.printStackTrace(); 
} 
} 

(Nó trả về một Boolean)


Như Dennis gợi ý nó là tốt hơn để sử dụng này:

final Method method = manager.getClass().getDeclaredMethod("isWifiApEnabled"); 
    method.setAccessible(true); //in the case of visibility change in future APIs 
    return (Boolean) method.invoke(manager); 
.210

(quản lý là WiFiManager)

+0

Cảm ơn bạn rất nhiều! – softwaresupply

+0

Không cần lặp lại tất cả các phương thức đã khai báo: lớp Class có phương thức "getDeclaredMethod". Kiểm tra mã trong câu trả lời của tôi. –

5

Trước tiên, bạn cần phải nhận được WifiManager:

Context context = ... 
final WifiManager wifi = (WifiManager) context.getSystemService(Context.WIFI_SERVICE); 

Sau đó:

public static boolean isSharingWiFi(final WifiManager manager) 
{ 
    try 
    { 
     final Method method = manager.getClass().getDeclaredMethod("isWifiApEnabled"); 
     method.setAccessible(true); //in the case of visibility change in future APIs 
     return (Boolean) method.invoke(manager); 
    } 
    catch (final Throwable ignored) 
    { 
    } 

    return false; 
} 

Ngoài ra bạn cần phải yêu cầu sự cho phép trong AndroidManifest.xml:

<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/> 
+0

Mục đích của tất cả các trận chung kết là gì? Những yêu cầu này có bắt buộc trong một số trường hợp không? – diedthreetimes

+0

@diedthreetimes: "Mục đích của tất cả các trận chung kết là gì? Có phải những yêu cầu này trong một số trường hợp không?" - Kiểu mã hóa, mỗi kiểu riêng của chúng. Xem [tôi nên sử dụng cuối cùng] (https://programmers.stackexchange.com/q/48413/158721) và [lạm dụng cuối cùng] (https://programmers.stackexchange.com/q/98691/158721). – Daniel

+0

Một chút bổ sung: người ta nên kiểm tra xem "getSystemService" có trả về null không. –

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