2012-05-02 43 views
6

Tôi cần phải kiểm tra xem internet là có sẵn hay không trong Android, vì vậy tôi đã cố gắng sử dụng các chức năng sau:Internet kết nối kiểm tra trong Android

boolean b_IsConnect = isNetworkAvailable(); 
private boolean isNetworkAvailable() { 
    ConnectivityManager connectivityManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); 
    NetworkInfo activeNetworkInfo = connectivityManager 
    .getActiveNetworkInfo(); 
    return activeNetworkInfo != null; 
} 

Và tôi cũng nói thêm các điều khoản cần thiết trong biểu hiện:

<uses-permission android:name="android.permission.INTERNET" /> 
<uses-permission android:name="android.permission.WAKE_LOCK" /> 
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> 
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" > 
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/> 
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/> 

Nhưng nó vẫn ném ngoại lệ:

05-02 16:05:26.226: E/AndroidRuntime(481): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.housedisplay/com.housedisplay.RssActivity}: java.lang.SecurityException: ConnectivityService: Neither user 10038 nor current process has android.permission.ACCESS_NETWORK_STATE. 
05-02 16:05:26.226: E/AndroidRuntime(481): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1736) 
05-02 16:05:26.226: E/AndroidRuntime(481): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1752) 
05-02 16:05:26.226: E/AndroidRuntime(481): at android.app.ActivityThread.access$1500(ActivityThread.java:123) 
05-02 16:05:26.226: E/AndroidRuntime(481): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:993) 
05-02 16:05:26.226: E/AndroidRuntime(481): at android.os.Handler.dispatchMessage(Handler.java:99) 
05-02 16:05:26.226: E/AndroidRuntime(481): at android.os.Looper.loop(Looper.java:126) 
05-02 16:05:26.226: E/AndroidRuntime(481): at android.app.ActivityThread.main(ActivityThread.java:3997) 
05-02 16:05:26.226: E/AndroidRuntime(481): at java.lang.reflect.Method.invokeNative(Native Method) 
05-02 16:05:26.226: E/AndroidRuntime(481): at java.lang.reflect.Method.invoke(Method.java:491) 
05-02 16:05:26.226: E/AndroidRuntime(481): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:841) 
05-02 16:05:26.226: E/AndroidRuntime(481): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:599) 
05-02 16:05:26.226: E/AndroidRuntime(481): at dalvik.system.NativeStart.main(Native Method) 
05-02 16:05:26.226: E/AndroidRuntime(481): Caused by: java.lang.SecurityException: ConnectivityService: Neither user 10038 nor current process has android.permission.ACCESS_NETWORK_STATE. 
05-02 16:05:26.226: E/AndroidRuntime(481): at android.os.Parcel.readException(Parcel.java:1322) 
05-02 16:05:26.226: E/AndroidRuntime(481): at android.os.Parcel.readException(Parcel.java:1276) 
05-02 16:05:26.226: E/AndroidRuntime(481): at android.net.IConnectivityManager$Stub$Proxy.getActiveNetworkInfo(IConnectivityManager.java:446) 
05-02 16:05:26.226: E/AndroidRuntime(481): at android.net.ConnectivityManager.getActiveNetworkInfo(ConnectivityManager.java:256) 
05-02 16:05:26.226: E/AndroidRuntime(481): at com.housedisplay.RssActivity.isNetworkAvailable(RssActivity.java:218) 
05-02 16:05:26.226: E/AndroidRuntime(481): at com.housedisplay.RssActivity.onCreate(RssActivity.java:59) 
05-02 16:05:26.226: E/AndroidRuntime(481): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1048) 
05-02 16:05:26.226: E/AndroidRuntime(481): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1700) 

bạn có thể cho tôi biết những gì happe ning ở đây?

+2

Câu hỏi ngớ ngẩn, nhưng bạn có quyền ở phần bên phải của tệp kê khai không? Như trong, trước thẻ ? –

+3

'' thiếu dấu gạch chéo cuối. Có thể gây ra vấn đề phân tích cú pháp XML, tôi không chắc chắn, nhưng nó phải có một dấu gạch chéo kết thúc anyways. –

+0

@ Sandervan'tVeer vâng tôi đã làm cho nó trong thẻ ứng dụng ot bên ngoài và một số câu hỏi ngớ ngẩn cũng dạy rất nhiều thứ – user1343673

Trả lời

10

<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" > thiếu một dấu gạch chéo kết thúc. Có thể gây ra sự cố khi phân tích cú pháp XML, điều này có thể khiến cho <uses-permission ...> tiếp theo không phân tích cú pháp chính xác.

2

Bạn cần phải thiết lập bên ngoài của sự cho phép của ứng dụng thẻ của bạn trong manifest.xml

Và như thế này nó sẽ làm việc:

private boolean connectionChecker() { 
    // ConnectivityManager casten 
    connectivityManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); 

    // boolean für networkinfo holen 
    activeNetworkInfo = connectivityManager.getActiveNetworkInfo(); 
    // Returnt true oder false if not null 
    return activeNetworkInfo != null; 
} 
1

thử như thế này,

private void checkNetworkState() { 
     // TODO Auto-generated method stub 
     ConnectivityManager connectivityManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); 
     NetworkInfo activeNetworkInfo = connectivityManager 
       .getActiveNetworkInfo(); 

     if (activeNetworkInfo == null) { 

      Toast.makeText(this, "Network Not Connected...Please Try Again", 
        Toast.LENGTH_LONG).show(); 

     } else { 
      if (activeNetworkInfo.isConnected()) { 

       try { 
        << Your Task>>> 

       } catch (Exception e) { 
        // TODO Auto-generated catch block 
        System.out.println("Inside the Exception" + e.getMessage()); 
       } 

      } else if (activeNetworkInfo.isConnectedOrConnecting()) { 

       Toast.makeText(this, 
         "Network is connecting Now please patient", 
         Toast.LENGTH_LONG).show(); 
      } 

     } 
    } 

Thêm quyền này trong tệp kê khai <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> (thẻ quyền vị trí phía trên thẻ ứng dụng)

1

Hãy thử mã này

public boolean isNetworkOnline() { 
boolean status=false; 
try{ 
    ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); 
    NetworkInfo netInfo = cm.getNetworkInfo(0); 
    if (netInfo != null && netInfo.getState()==NetworkInfo.State.CONNECTED) { 
     status= true; 
    }else { 
     netInfo = cm.getNetworkInfo(1); 
     if(netInfo!=null && netInfo.getState()==NetworkInfo.State.CONNECTED) 
      status= true; 
    } 
}catch(Exception e){ 
    e.printStackTrace(); 
    return false; 
} 
return status; 

} 
0
NetworkInfo i = conMgr.getActiveNetworkInfo(); if (i == null) 
    return false; if (!i.isConnected()) 
    return false; if (!i.isAvailable()) 
    return false; return true; 
0

bạn chỉ cần đặt quyền trên Thẻ ứng dụng của bạn trong Tuyên ngôn Andriod

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