2013-03-21 14 views
17

Korzystam z następującego kodu, aby sprawdzić połączenie internetowe w całej mojej aplikacji.Niestety aplikacja jest zatrzymywana podczas sprawdzania sieci

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

I zdefiniowano wymaganego zezwolenia w pliku manifestu

Ilekroć próbuję odłączyć/podłączyć do sieci za pomocą klawisza F8 otrzymam „Niestety APP został zatrzymany”, a ja nie otrzymuję żadnych drukuj w logcat. Czy mogę się dowiedzieć, jaki błąd popełniam?

+1

opublikować błąd logcat. – rajeshwaran

+0

@rajeshwaran no logcat error otrzymuję – Beginner

Odpowiedz

62

Czy dodanych w tym w androidmanifest.xml

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

jeśli dodano powyżej następnie sprawdzić ten kod:

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

i

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

UWAGA: Jeśli "ponownie targ" eting android N Preview. Nad odbiornikiem nie będzie działać zgodnie z ograniczeniami ograniczonymi przez Google. Link: https://developer.android.com/preview/features/background-optimization.html#connectivity-action

+0

dodałem poniższe instrukcje w moim pliku manifestu. Ale wciąż otrzymuję ten problem – Beginner

+0

to ten sam problem .. dodałem odbiornik w pliku manifestu przed jedynym – Beginner

+0

teraz w LogCat ja Wystąpił następujący błąd: '03 -21 12: 13: 01.340: E/chromium (801): zewnętrzny/chrom/net/disk_cache/entry_impl.cc: 904: [0321/121301: BŁĄD: entry_impl.cc (904) ] Nie można zapisać danych użytkownika 03-21 12: 13: 01.340: E/chrom (801): ex ternal/chromium/net/disk_cache/entry_impl.cc: 904: [0321/121301: BŁĄD: entry_impl.cc (904)] Nieudane zapisanie danych użytkownika ' – Beginner

6

Powyższy kod nie działał prawidłowo w przypadku połączenia Wi-Fi. To jest zmodyfikowany

SIMPLE ONE

. AndroidManifest.xml

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

wewnątrz znacznika nanoszenia 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

Aplikacje kierowania Android 7,0 (poziom API 24) oraz większe nie otrzymają nadawać, jeśli deklarują odbiorcę w swoim manifeście. Aplikacje będą nadal odbierać audycje, jeśli zarejestrują BroadcastReceiver z Context.registerReceiver() i ten kontekst będzie nadal ważny.

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

+0

Proszę nie zamieszczać tej samej odpowiedzi na więcej niż jedno pytanie. Jeśli pytania są w zasadzie takie same, [oznacz je flagą] (https://stackoverflow.com/privileges/flag-posts) jako duplikaty. W przeciwnym razie dostosuj odpowiedź na pytanie. (Również posty, które są niczym innym jak cytatem, są często mniej przydatne niż przydatne. Ponadto wszystkie cytaty muszą być sformatowane, aby było jasne, co cytujesz, w przeciwnym razie plagiatujesz fałszywe przedstawianie tego, co napisałeś.) –

Powiązane problemy