2012-10-25 24 views
5

Khi mạng chuyển từ GPRS sang Wifi, tôi đã nhận được 3 lần phát sóng android.net.conn.CONNECTIVITY_CHANGE.Nhận 3 chương trình phát sóng Khi mạng được chuyển từ GPRS sang Wifi

Trong onReceive(), tôi sử dụng mã bên dưới để đánh giá liệu Wifi có được kết nối hay không. Nhưng tôi cũng nhận được 3 lần tin nhắn của "Wifi Connected", và doSomething() được gọi là 3 lần.

ConnectivityManager connManager = (ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE); 
NetworkInfo wifiInfo = connManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI); 
if(wifiInfo.isConnected()) { 
    Log.v(Constant.APP_NAME, "Wifi Connected."); 
    doSomething(); 
} 

Tôi muốn chỉ nhận được một tin nhắn "Wifi được kết nối" và gọi doSomething() chỉ ONCE. Tôi nên làm như thế nào?

Cảm ơn bạn. Và xin lỗi vì tiếng Anh nghèo của tôi.

Trả lời

1

Tạo một giá trị cờ boolean để kiểm tra cho Thông tin về làm cho nó tĩnh nếu bạn muốn nó được thể truy cập từ một số wehere khác Ví dụ

public static boolean flagConnected = false; 

ConnectivityManager connManager = (ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE); 
NetworkInfo wifiInfo = connManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI); 
if(wifiInfo.isConnected() && flagConnected == false) { 
flagConnected = true; 
Log.v(Constant.APP_NAME, "Wifi Connected."); 
doSomething(); 
} 

Sau doSomething(); bạn có thể thay đổi giá trị của lá cờ là false nữa

ClassName.flagConnected = false; 
+0

Tôi sẽ dùng thử. Cảm ơn bạn. – happyz90

0

Khai báo một biến số nguyên trong lớp Receiver của bạn ...

public static int i = 0;

và đặt mã của bạn trong tình trạng này

if((++i)%3==1){ 
//your whole stuff here.. 
} 
+0

OK ... Nhưng không phải luôn luôn 3 lần ... Cảm ơn bạn. – happyz90

0

Tôi nghĩ rằng bạn có thể quên unregister broadcastreceiver của bạn trong onPause/onStop.

+0

Nhưng tôi muốn được phát sóng mãi mãi ... Cảm ơn bạn. – happyz90

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