К сожалению, приложение останавливается при проверке сети

Я использую следующий код, чтобы проверить подключение к Интернету через мое приложение.

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

И я определил необходимые разрешения в файле манифеста.

Всякий раз, когда я пытаюсь отключить / подключить сеть с помощью клавиши F8, я получу "НЕДОСТАТОЧНО ПРИЛОЖЕНИЕ ОСТАНОВЛЕНО", и я не получаю никакой печати в logcat,

Могу ли я узнать, какую ошибку я делаю?

3 ответа

Решение

Вы добавили это в AndroidManifest.xml?

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

если вы добавили выше, то проверьте этот код:

<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", "Connected" + isConnected);   
          else 
              Log.i("NET", "Not Connected" + isConnected);
    }
}

ПРИМЕЧАНИЕ: если вы нацелены на Android N Preview. Выше получатель не будет работать в соответствии с ограничениями Google.

Ссылка: https://developer.android.com/preview/features/background-optimization.html

Приведенный выше код не работал должным образом для подключения Wi-Fi. Это модифицированный

ПРОСТО ОДИН

, AndroidManifest.xml

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

внутри тега приложения в 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. ");
    }
}

Приложения, ориентированные на Android 7.0 (уровень API 24) и выше, не получают эту трансляцию, если в декларации они объявили получателя трансляции. Приложения по-прежнему будут получать широковещательные сообщения, если они зарегистрируют свой BroadcastReceiver в Context.registerReceiver(), и этот контекст все еще действителен.

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

Другие вопросы по тегам