2013-03-21 18 views
17

Tôi đang sử dụng mã sau đây để kiểm tra kết nối internet trong suốt ứng dụng của tôi.không may ứng dụng đang nhận được dừng lại trong khi kiểm tra mạng

import android.content.BroadcastReceiver; 
import android.content.Context; 
import android.content.Intent; 
import android.net.ConnectivityManager; 
import android.net.NetworkInfo; 
import android.widget.Toast; 

public class ConnectionChangeReceiver extends BroadcastReceiver 
{ 
    @Override 
    public void onReceive(Context context, Intent intent) 
    { 
    ConnectivityManager connectivityManager = (ConnectivityManager) 
         context.getSystemService(Context.CONNECTIVITY_SERVICE); 
    NetworkInfo activeNetInfo = connectivityManager.getActiveNetworkInfo(); 
    NetworkInfo mobNetInfo = connectivityManager.getNetworkInfo 
              (ConnectivityManager.TYPE_MOBILE); 
    if (activeNetInfo != null) 
    { 
     Toast.makeText(context, "Active Network Type : " + 
         activeNetInfo.getTypeName(), Toast.LENGTH_SHORT).show(); 
    } 
    if(mobNetInfo != null) 
    { 
     Toast.makeText(context, "Mobile Network Type : " + 
          mobNetInfo.getTypeName(), Toast.LENGTH_SHORT).show(); 
    } 
    } 
} 

Và tôi đã xác định sự cho phép cần thiết trong file manifest

Bất cứ khi nào tôi cố gắng để ngắt kết nối/kết nối mạng bằng cách sử dụng phím F8 tôi sẽ nhận được "Thật không may APP đã ngừng", và tôi không nhận được bất kỳ in trong logcat. Tôi có thể biết mình đang làm sai lầm gì không?

+1

đăng lỗi logcat của bạn. – rajeshwaran

+0

@rajeshwaran không có lỗi logcat tôi đang nhận được – Beginner

Trả lời

62

Bạn đã thêm này trong androidmanifest.xml

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

nếu bạn đã thêm ở trên sau đó kiểm tra mã này:

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

public class UpdateReceiver extends BroadcastReceiver { 

    @Override 
    public void onReceive(Context context, Intent intent) { 


      ConnectivityManager connectivityManager = (ConnectivityManager) 
             context.getSystemService(Context.CONNECTIVITY_SERVICE); 
      NetworkInfo activeNetInfo = connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_MOBILE); 
      boolean isConnected = activeNetInfo != null && activeNetInfo.isConnectedOrConnecting(); 
      if (isConnected)  
       Log.i("NET", "connecte" +isConnected); 
      else Log.i("NET", "not connecte" +isConnected); 
     } 
    } 

Chú ý: Nếu bạn 're targ eting android N Xem trước. Người nhận trên sẽ không hoạt động theo hạn chế bị hạn chế bởi Google. Liên kết: https://developer.android.com/preview/features/background-optimization.html#connectivity-action

+0

tôi đã thêm các câu lệnh dưới đây vào tệp kê khai của mình. Nhưng vẫn gặp vấn đề đó – Beginner

+0

vấn đề tương tự .. tôi đã thêm người nhận vào tệp kê khai trước chỉ – Beginner

+0

bây giờ trong logcat i gặp lỗi sau '03 -21 12: 13: 01.340: E/chromium (801): external/chromium/net/disk_cache/entry_impl.cc: 904: [0321/121301: ERROR: entry_impl.cc (904) ] Không thể lưu dữ liệu người dùng 03-21 12: 13: 01.340: E/chromium (801): ví dụ: ternal/chromium/net/disk_cache/entry_impl.cc: 904: [0321/121301: LRI: entry_impl.cc (904)] Không lưu được dữ liệu người dùng ' – Beginner

6

Mã trên không hoạt động đúng cách để kết nối wi-fi. Đây là Sửa đổi

SIMPLE ONE

. AndroidManifest.xml

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

bên trong thẻ áp dụng AndroidManifest.xml

<receiver android:name="android.YOUR-JAVA-CLASS-PATH.BackgroundSync" android:enabled="true"> 
     <intent-filter> 
      <action android:name="android.net.conn.CONNECTIVITY_CHANGE" /> 
     </intent-filter> 
</receiver> 

BackgroundSync.java

import android.content.BroadcastReceiver; 
import android.content.Context; 
import android.content.Intent; 
import android.net.ConnectivityManager; 
import android.util.Log; 
import android.widget.Toast; 

public class BackgroundSync extends BroadcastReceiver { 
    @Override 
    public void onReceive(Context context, Intent intent) { 
     ConnectivityManager cm =(ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); 
     if (cm.getActiveNetworkInfo()!=null){ 
      Toast.makeText(context, "Connected to Internet", Toast.LENGTH_LONG).show(); 
     } 
     else Log.i("INTERNET","---------------------> Internet Disconnected. "); 
    } 
} 
0

Apps nhắm mục tiêu Android 7.0 (API level 24) và cao hơn không nhận này phát sóng nếu họ tuyên bố người nhận phát sóng trong tệp kê khai của họ. Ứng dụng sẽ vẫn nhận được chương trình phát sóng nếu họ đăng ký BroadcastReceiver của họ bằng Context.registerReceiver() và bối cảnh đó vẫn hợp lệ.

https://developer.android.google.cn/reference/android/net/ConnectivityManager.html?hl=zh-cn#CONNECTIVITY_ACTION

+0

Vui lòng không đăng câu trả lời tương tự cho nhiều câu hỏi. Nếu các câu hỏi về cơ bản giống nhau, [gắn cờ chúng] (https://stackoverflow.com/privileges/flag-posts) làm bản sao. Nếu không, hãy tùy chỉnh câu trả lời cho câu hỏi. (Ngoài ra, các bài viết không có gì ngoài một câu trích dẫn thường ít hữu ích hơn. Ngoài ra, tất cả các trích dẫn phải được định dạng sao cho rõ ràng những gì bạn đang trích dẫn; nếu không bạn đang viết hoa bằng cách trình bày sai những gì bạn viết). –

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