2012-09-26 26 views
8

Tôi đã tạo một BroadcastReceiver để nghe sự kiện CONNECTIVITY_CHANGE. Hiện tại, tôi chỉ cần in ra hành động của số Intent gọi số BroadcastReceiver và các tính năng bổ sung của nó. Tôi đang sử dụng điện thoại thử nghiệm tại văn phòng của chúng tôi ở Manila và thẻ SIM là từ Đan Mạch. Khi onReceive() được gọi, đây là những gì được in ra trong LogCat:Phát hiện khi chuyển vùng bị tắt trong Android

action: android.net.conn.CONNECTIVITY_CHANGE 
key: extraInfo, value: data.tre.dk 
key: htcCurrentActiveNetwork, value: null 
key: networkInfo, value: null 
key: reason, value: roamingOn 
key: noConnectivity, value: null 
key: inetCondition, value: null 

Tôi cần phải biết những gì giá trị của reason là khi chuyển vùng đi tắt - có thể là roamingOff bằng cách đoán, nhưng tôi không thể biết chắc chắn, trừ khi tôi đến Đan Mạch. Điều này là do tôi cần thực hiện nhiệm vụ khi dịch vụ chuyển vùng bị tắt và tôi nhận thấy từ LogCat rằng sự kiện CONNECTIVITY_CHANGE được kích hoạt vì các lý do khác ngoài việc chuyển đổi chế độ chuyển vùng. Hoặc có cách nào tốt hơn để phát hiện khi chuyển vùng bị tắt không?

Mã cho máy thu phát sóng:

public void onReceive(Context context, Intent intent) { 
    Log.d(This.LOGTAG, "action: " + intent.getAction()); 
    Bundle extras = intent.getExtras(); 
    for (String key : extras.keySet()) { 
     Log.d(This.LOGTAG, "key: " + key + ", value: " + extras.getString(key)); 
    } 
} 

nhập Manifest:

<receiver android:name=".listener.RoamingListener"> 
    <intent-filter> 
     <action android:name="android.net.conn.CONNECTIVITY_CHANGE" /> 
    </intent-filter> 
</receiver> 

Trả lời

1

Có sự khác biệt giữa chuyển vùng mạng và chuyển vùng dữ liệu.

Nói chung, chuyển vùng mạng cho phép telco của bạn đi qua vệ tinh của bên thứ ba trong khi bạn ở bên ngoài quốc gia để bạn có thể kết nối với dịch vụ của họ. Ngay cả khi bạn đã nói với telco rằng bạn muốn đăng ký chuyển vùng mạng, nó sẽ KHÔNG được kích hoạt cho đến khi bạn thực sự bắt đầu kết nối qua vệ tinh viễn thông của bên thứ ba và điều đó chỉ xảy ra khi bạn thực sự ra khỏi đất nước.

Chuyển vùng dữ liệu chỉ đơn giản là cho phép/không cho phép thiết bị của bạn tiêu thụ dữ liệu di động khi bạn đang ở chế độ chuyển vùng mạng. Tùy thuộc vào thiết bị nhiều hơn và bạn có thể dễ dàng bật hoặc tắt tính năng này trong ứng dụng Cài đặt của điện thoại.

Tóm lại, nếu bạn muốn phát hiện chuyển vùng mạng, hãy sử dụng TelephonyManager.isNetworkRoaming(). Nếu bạn muốn kiểm tra xem có bật hoặc tắt chuyển vùng dữ liệu hay không, hãy sử dụng Settings.Secure.getInt(getContentResolver(), Settings.Secure.DATA_ROAMING).

QUAN TRỌNG: Tôi chưa tự kiểm tra các trường hợp sau và tôi không chắc chắn giá trị isNetworkRoaming() sẽ trở lại.

  1. Bạn không thông báo cho nhà telco của mình bật chuyển vùng mạng, nhưng khi bạn đến một quốc gia khác, điện thoại bắt đầu phát hiện các mạng viễn thông khác.
  2. Sau trường hợp 1, điện thoại sẽ yêu cầu bạn chọn mạng viễn thông được phát hiện nào để kết nối. Bạn chọn một điện thoại và điện thoại cố kết nối. Tôi không biết giá trị isNetworkRoaming() sẽ trở lại đây vì bạn không đăng ký chuyển vùng mạng ngay từ đầu.
0

Bạn chỉ có thể sử dụng dòng này để phát hiện chuyển vùng quốc:

Settings.Secure.getInt(getContentResolver(), Settings.Secure.DATA_ROAMING) 

này doe không cần bất kỳ quyền hoặc người nhận đặc biệt nào.

Source

+0

Tôi vừa ghi lại kết quả của dòng đó cùng với kết quả của 'TelephonyManager.isNetworkRoaming()'.Tôi phát hiện ra rằng 'Settings.Secure.DATA_ROAMING' có thể trả về' 0' (có nghĩa là, chuyển vùng dữ liệu bị tắt) trong khi 'isNetworkRoaming()' là 'true'. Tôi đoán điều này là do telco vẫn đang trong chế độ chuyển vùng mạng nhưng tôi không cho phép thiết bị của mình sử dụng Internet di động. Chúng dường như là các công tắc khác nhau, và tôi đang ở chế độ chuyển vùng mạng. –

+0

Và bạn muốn biết điều gì? Tôi cho rằng 'TelephonyManager.isNetworkRoaming()' cho thấy bạn đang chuyển vùng và cài đặt hiển thị nếu bạn có thể sử dụng internet trong chuyển vùng – Jin35

+0

Tôi đang ở chế độ chuyển vùng mạng vì tôi đang cố gắng đo lường hóa đơn hàng tháng tiếp theo của người dùng-- và bao gồm không chỉ số lượng dữ liệu di động được gửi/nhận thông qua chuyển vùng dữ liệu. –

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