2016-04-06 17 views
7

tôi đọc nó trên Google Developer:BroadcastReceiver CONNECTIVITY_CHANGE luôn chạy trong ứng dụng khởi chạy lần đầu tiên?

("android.net.conn.CONNECTIVITY_CHANGE") hành động bất cứ khi nào các chi tiết kết nối đã thay đổi

tôi có mã này:

public class MainActivity mở rộng AppCompatActivity {

private NetworkChangeReceiver receiver; 
private boolean connIntentFilterIsRegistered; 


@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    receiver = new NetworkChangeReceiver(); 
} 

@Override 
protected void onPause() { 
    super.onPause(); 
    if (connIntentFilterIsRegistered) { 
     unregisterReceiver(receiver); 
     connIntentFilterIsRegistered = false; 
    } 
} 

@Override 
protected void onResume() { 
    super.onResume(); 
    if (!connIntentFilterIsRegistered) { 
     registerReceiver(receiver, new IntentFilter("android.net.conn.CONNECTIVITY_CHANGE")); 
     connIntentFilterIsRegistered = true; 
    } 
} 

và //

public class NetworkUtil {

public static int TYPE_WIFI = 1; 
public static int TYPE_MOBILE = 0; 
public static int TYPE_NOT_CONNECTED = 2; 

public static int getConnectivityStatus(Context context) { 
    ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); 
    NetworkInfo activeNetwork = cm.getActiveNetworkInfo(); 
    if (activeNetwork != null && activeNetwork.isConnectedOrConnecting()) { 
     if (activeNetwork.getType() == ConnectivityManager.TYPE_WIFI) { 
      return TYPE_WIFI; 
     } 
     if (activeNetwork.getType() == ConnectivityManager.TYPE_MOBILE) { 
      return TYPE_MOBILE; 
     } 
    } 
    return TYPE_NOT_CONNECTED; 
} 

public static String getConnectivityStatusString(Context context) { 
    int conn = NetworkUtil.getConnectivityStatus(context); 
    String status = null; 
    if (conn == TYPE_MOBILE) { 
     status = "Mobile cellular enabled"; 
    } else if (conn == TYPE_WIFI) { 
     status = "Wifi enabled"; 
    } else if (conn == TYPE_NOT_CONNECTED) { 
     status = "Not connected to internet"; 
    } 
    return status; 
} 

}

khi lần đầu tiên tôi khởi động ứng dụng, mục đích này luôn bị sa thải và hiển thị một hộp thoại với trạng thái hiện tại của mạng. Nhưng dựa trên tài liệu này, nó chỉ xảy ra khi kết nối thay đổi? Nếu tôi muốn hiển thị này chỉ khi mạng thay đổi, làm thế nào tôi có thể làm gì? Rất cảm ơn

Trả lời

18

Phát sóng android.net.conn.CONNECTIVITY_CHANGEphát sóng dính. Điều này có nghĩa là bất cứ khi nào bạn đăng ký BroadcastReceiver cho ACTION này, nó sẽ luôn được kích hoạt ngay lập tức và onReceive() sẽ được gọi với thay đổi kết nối phát sóng gần đây nhất. Điều này cho phép bạn để có được trạng thái hiện tại của kết nối mà không cần chờ đợi một cái gì đó để thay đổi.

Nếu bạn muốn bỏ qua tình trạng hiện thời, và chỉ muốn xử lý thay đổi trạng thái, bạn có thể thêm video này vào onReceive() của bạn:

if (isInitialStickyBroadcast()) { 
    // Ignore this call to onReceive, as this is the sticky broadcast 
} else { 
    // Connectivity state has changed 
    ... (your code here) 
} 
+0

Rất cám ơn. Tôi đã làm điều đó trước khi nhìn thấy câu trả lời của bạn và nó hoạt động: D –

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