2010-11-11 44 views
26

Tôi đang cố viết một ứng dụng cần biết khi không có kết nối mạng IP. Tôi đang sử dụng các sự kiện phát sóng android.net.conn.CONNECTIVITY_CHANGE cùng với ConnectivityManager để phản ứng với những thay đổi trong tiểu bang để đạt được điều này, nhưng tôi đang gặp vấn đề kiểm tra thiết lập của tôi trong giả lập.Cách mô phỏng tổng số mất mạng trong Trình giả lập Android

Tôi đã thử cả hai chế độ trên máy bay và nhấn F8 để vô hiệu hóa "Mạng di động" nhưng ngay cả khi cả hai ứng dụng này tham gia vào ứng dụng vẫn "nhìn thấy" mạng bên dưới.

Có ai quản lý để tìm cách mô phỏng tổng số thiếu truy cập mạng không?

+0

@ Hardlib: bạn có thể thử câu trả lời cập nhật mới do tôi đăng không? –

+0

Tôi nghĩ tôi đã giải quyết được vấn đề mà tôi đang gặp phải ở đây. Tôi có một thư viện của bên thứ ba mà làm một số công việc mạng mà tiếp tục làm việc trong giả lập ngay cả sau khi mã mẫu cho biết mạng là xuống. Có thể phá bỏ kết nối của bên thứ ba vì vậy tôi sẽ làm điều này khi ConnectivityManager nói không có mạng. – hardillb

Trả lời

4

Tôi đã có kinh nghiệm rằng sau khi nhấn F8 một biểu tượng trong thanh trạng thái cho thấy rằng không có kết nối, nhưng nếu bạn cố gắng duyệt nó hoạt động. Có thể nó có liên quan đến lỗi mở này: bug 3838

+0

Có thể đặt Windows 8 vào chế độ máy bay nếu máy tính của bạn không dây, đó là một cách "thực tế" phong nha để kiểm tra điều này như trình giả lập không có ý tưởng gì đã xảy ra. – AutoM8R

1

isAvailable - không có điều này isConnected có thể trả lại TRUE khi WIFI bị tắt. Tham khảo mã dưới đây và url này để biết thêm thông tin http://developer.android.com/guide/developing/tools/emulator.html

ConnectivityManager conMgr = ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE); 

     if (
connMgr.getActiveNetworkInfo() != null && 
      conMgr.getActiveNetworkInfo().isAvailable() && 

    conMgr.getNetworkInfo(0).getState() == NetworkInfo.State.CONNECTED || conMgr.getNetworkInfo(1).getState() == NetworkInfo.State.CONNECTING) { 

      //notify user you are online 

     }  else if (

    conMgr.getNetworkInfo(0).getState() == NetworkInfo.State.DISCONNECTED || conMgr.getNetworkInfo(1).getState() == NetworkInfo.State.DISCONNECTED) { //notify user you are not online 

      Toast.makeText(getBaseContext(),"Please 

    Check Your Internet Connection and Try Again",Toast.LENGTH_SHORT).show(); 

     } 

Thêm yêu cầu android.permission.ACCESS_NETWORK_STATE phép manifest ứng dụng của bạn:

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

Xin chào, tôi có một số mã rất giống với vấn đề này, vấn đề là nó sẽ kích hoạt một số mã phức tạp mà tôi cần để kiểm tra và gỡ lỗi. Đó là thử nghiệm những sự kiện đó là vấn đề, đó là lý do tại sao tôi muốn mô phỏng các kích hoạt sẽ kích hoạt mã. – hardillb

+0

@hardlib: bạn có thể xây dựng điều này không, tôi có nhận được thông điệp của bạn rõ ràng không? –

4

Có quan điểm DDMS trong Eclipse, nơi bạn có thể thao tác với tốc độ kết nối và tính khả dụng (trong thẻ điều khiển giả lập). Nếu nó không hoạt động cho bạn, tôi có thể đề xuất bật mạng của hệ điều hành của bạn hoặc thậm chí tắt cáp :)

+2

có nó hoạt động nhưng bạn bị mất kết nối adb của bạn :-( – arnouf

3

Rất tiếc, tôi muốn đăng phản hồi này (http://stackoverflow.com/questions/ 3400109/mô phỏng mạng không dây trong mô phỏng/6078544 # 6078544) tại đây.

Dưới đây là giải pháp tôi đã đưa ra cho mô phỏng tổng mất kết nối mạng trên giả lập:

Viết kịch bản sau đây và đặt tên là "nonetwork.sh"

netcfg eth0 down 
sleep 10 
netcfg eth0 up 
netcfg eth0 dhcp 

Tải lên kịch bản sau đây để giả lập qua lệnh này:

adb push nonetwork.sh /data/local/nonetwork.sh 

Thay đổi các điều khoản

adb shell chmod 700 /data/local/nonetwork.sh 

Run nó

adb shell /data/local/nonetwork.sh 

Trong khi mạng được xuống trên thiết bị bạn sẽ mất quyền truy cập vào adb cũng nhưng một khi kết nối được tái lập nó sẽ hoạt động trở lại. Hi vọng điêu nay co ich.

+0

Mẹo tuyệt vời, tnx! Chỉ lưu ý nhỏ: người dùng của mẹo này phải bảo tồn vị trí tập lệnh. Kịch bản trong/mnt có "chủ sở hữu hư hỏng". –

1

tôi thích lệnh svc

svc wifi disable 
svc wifi enable 

qua lệnh netcfg

netcfg mlan0 up/down 

Bởi vì khi bạn bật xuống wifi sử dụng sau này, nó sẽ phục hồi sau một thời gian mà tôi đã không phát hiện ra tại sao.

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