2012-02-24 23 views
5

Tôi muốn thiết nghe để nghe trên nhà nước không dây, bất cứ ai có thể giúp tôi với mã của tôiNghe WIFI bang

import android.telephony.PhoneStateListener; 
import android.telephony.TelephonyManager; 

...

TelephonyManager wTelephonyManager; 

...

 wTelephonyManager=(TelephonyManager)getSystemService(Context.WIFI_SERVICE); 
    wTelephonyManager.listen(new PhoneL(),PhoneStateListener.LISTEN_DATA_CONNECTION_STATE); 
    connManager = (ConnectivityManager) getSystemService(CONNECTIVITY_SERVICE); 

// đây là sự kiện tôi sử dụng mà tôi muốn nghe để thay đổi wifi và mã ở trên là tất cả trong onCreate {}

class PhoneL extends PhoneStateListener 

{ 






    public void onWifiStateChanged(int state, String nesto) 
    { 
     mWifi = connManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI); 
      //mWifi.isConnectedOrConnecting() 
      if(mWifi.isConnectedOrConnecting()) 
      { 
       Toast.makeText(WifiActivity.this,"Ima WIFI",Toast.LENGTH_LONG).show();  
      } 
      else 
      { 
       Toast.makeText(WifiActivity.this,"! NEMA WIFI",Toast.LENGTH_LONG).show(); 
      } 


    } 

} 

// ai có thể vui lòng giúp tôi tạo ra một người biết lắng nghe mà sẽ lắng nghe tình trạng wifi và kiểm tra xem wifi được kết nối hoặc kết nối nếu không muốn nói là tôi muốn để cho phép lưu lượng gói dữ liệu thông qua 3g/4g

+0

có một cái nhìn tại [chủ đề này] [1]. [1]: http://stackoverflow.com/questions/3767591/check-intent-internet-connection –

Trả lời

-2

Hệ thống Android yêu cầu chuyển sang Data Traffic khi WiFi không được kết nối nhưng có sự cố.
Nếu bạn tắt WiFi khi màn hình tắt, nó sẽ liên tục thay đổi giữa mạng WiFi và 3G và nếu bạn đã chọn ứng dụng để gửi dữ liệu dưới nền, nó sẽ sử dụng kết nối dữ liệu tốn kém hơn nếu bạn không có giới hạn kế hoạch dữ liệu.
Một vấn đề khác là khi bạn đang ở trong khu vực có tín hiệu Wi-Fi không mạnh, nó sẽ liên tục thay đổi thành Lưu lượng dữ liệu và bạn sẽ gặp sự cố khi duyệt hoặc bất kỳ điều gì.
Vấn đề thứ ba là pin từ những gì tôi đã nghe tốt hơn (pin khôn ngoan) để sử dụng kết nối WiFi hơn dữ liệu, với một Tiện ích bổ sung không tắt WiFi khi màn hình tắt. vì vậy) vì tắt và bật WiFi là tốn kém nhất (pin) để luôn bật. do đó hãy để nó vào hệ thống android.

5

tôi cũng gặp vấn đề đó, đây là cách tôi giải quyết nó.

Trong hoạt động của tôi onCreate (..) Tôi đã làm

this.registerReceiver(mWifiStateChangedReceiver,new IntentFilter(WifiManager.WIFI_STATE_CHANGED_ACTION)); 

và bổ sung i tạo ra các thành viên 'mWifiStateChangedReceiver' theo cách này

private BroadcastReceiver mWifiStateChangedReceiver = new BroadcastReceiver() 
{ 

    @Override 
    public void onReceive(Context context, Intent intent) 
    { 
     // TODO Auto-generated method stub 

     int extraWifiState = intent.getIntExtra(WifiManager.EXTRA_WIFI_STATE, WifiManager.WIFI_STATE_UNKNOWN); 

     switch (extraWifiState) 
     { 
     case WifiManager.WIFI_STATE_DISABLED: 
     case WifiManager.WIFI_STATE_DISABLING: 
      enableUI(false); 
      break; 
     case WifiManager.WIFI_STATE_ENABLED: 
      ConnectivityManager conMan = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); 
      while(conMan.getActiveNetworkInfo() == null || conMan.getActiveNetworkInfo().getState() != NetworkInfo.State.CONNECTED) 
      { 
       try 
       { 
        Thread.sleep(500); 
       } catch (InterruptedException e) 
       { 
        e.printStackTrace(); 
       } 
      } 
      update(); 
      enableUI(true); 
      break; 
     case WifiManager.WIFI_STATE_ENABLING: 
      break; 
     case WifiManager.WIFI_STATE_UNKNOWN: 
      break; 
     } 

    } 
}; 

Như bạn có thể thấy, khi tôi nhận được WifiManager.WIFI_STATE_ENABLED tôi bổ sung kiểm tra xem mạng có thực sự được kết nối hay không, bởi vì một WiFi được kích hoạt không có nghĩa là nó được kết nối. Ít nhất đây là dự đoán của tôi, đó là lý do tại sao tôi chờ đợi cho đến khi mạng thực sự được kết nối.

+0

Wont vòng lặp while làm cho hanf ứng dụng khi đối mặt với WIFI kích hoạt nhưng kịch bản not connected. Bạn nên thêm thời gian vào nó, như nói sau 10 vòng lặp. –

+0

Một CountDownLatch sẽ cung cấp cho bạn một cách tốt đẹp để chờ đợi một sự kiện với thời gian chờ. –

+0

xin lỗi @Chris, ... nhưng bạn đặt IntentFilter mới này (WifiManager.WIFI_STATE_CHANGED_ACTION)) khi bạn đăng ký người nghe. Nhưng bên trong Broadcastlistener bạn đặt giá trị khác nhau: intent.getIntExtra (WifiManager.EXTRA_WIFI_STATE, WifiManager.WIFI_STATE_UNKNOWN); đúng không? – gumuruh

1

Nếu bạn muốn nghe cường độ tín hiệu bạn cũng có thể nghe tại địa chỉ:

WifiManager.RSSI_CHANGED_ACTION