2013-03-21 10 views
17

Ich verwende den folgenden Code, um die Internetverbindung in meiner App zu überprüfen.Leider wird die App beim Überprüfen des Netzwerks angehalten.

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(); 
    } 
    } 
} 

Und ich habe in der Manifest-Datei erforderliche Berechtigung definiert

Jedes Mal, wenn ich versuche, das Netzwerk mit F8-Taste zu trennen/verbinden will ich „LEIDER APP HAT GESTOPPT“ erhalten, und ich erhalte keinen Druck in logcat. Kann ich wissen, was ich mache?

+1

poste deinen logcat Fehler. – rajeshwaran

+0

@rajeshwaran kein Logcat Fehler Ich bekomme – Beginner

Antwort

62

hinzugefügt haben Sie diese in androidmanifest.xml

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

, wenn Sie oben dann diesen Code überprüfen hinzugefügt haben:

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

und

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); 
     } 
    } 

HINWEIS: Wenn Sie Targ eting android N Vorschau. Obiger Empfänger funktioniert nicht wie von Google eingeschränkt. Link: https://developer.android.com/preview/features/background-optimization.html#connectivity-action

+0

Ich habe die folgenden Anweisungen in meiner Manifest-Datei hinzugefügt. Aber immer noch das Problem – Beginner

+0

es gleiches Problem .. ich vor nur Empfänger in Manifest-Datei hinzugefügt habe – Beginner

+0

jetzt in logcat i den folgenden Fehler erhalten '03 -21 12: 13: 01.340: E/Chrom (801): extern/chrom/net/disk_cache/entry_impl.cc: 904: [0321/121301: FEHLER: entry_impl.cc (904) ] Fehler beim Speichern der Benutzerdaten 03-21 12: 13: 01.340: E/Chrom (801): ex ternal/chrom/net/disk_cache/entry_impl.cc: 904: [0321/121301: FEHLER: entry_impl.cc (904)] Fehler beim Speichern von Benutzerdaten ' – Beginner

6

Der obige Code funktionierte nicht richtig für Wi-Fi-Verbindung. Dies ist die Modifizierte

SIMPLE ONE

. AndroidManifest.xml

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

innerhalb Anwendung Schild von 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

Anwendungen Android 7.0 (API-Ebene 24) Targeting und höher nicht erhalten diese Broadcast, wenn sie den Broadcast-Empfänger in ihrem Manifest deklarieren. Apps empfangen weiterhin Broadcasts, wenn sie ihren BroadcastReceiver mit Context.registerReceiver() registrieren und dieser Kontext weiterhin gültig ist.

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

+0

Bitte nicht die gleiche Antwort auf mehr als eine Frage posten. Wenn die Fragen im Grunde gleich sind, [markieren Sie sie] (https://stackoverflow.com/privileges/flag-posts) als Duplikate. Ansonsten passen Sie die Antwort auf die Frage an. (Außerdem sind Beiträge, die nichts anderes als ein Zitat sind, oft weniger als hilfreich. Außerdem müssen alle Zitate formatiert sein, damit klar ist, was Sie gerade zitieren; andernfalls plagiieren Sie, indem Sie falsch darstellen, was Sie geschrieben haben.) –

Verwandte Themen