К сожалению приложение прекращается при проверке сети
Я использую следующий код для проверки интернет-соединения через мое приложение.
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
.
Могу ли я узнать, какую ошибку я делаю?
Ответы
Ответ 1
ПРИМЕЧАНИЕ: если вы нацелены на Android N Preview. Выше получатель не будет работать в соответствии с ограничениями, ограниченными Google.
Ссылка: https://developer.android.com/preview/features/background-optimization.html#connectivity-action
Используйте: WorkManager или JobScheduler для того же.
Вы добавили это в 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);
}
}
Ответ 2
Приведенный выше код не работал должным образом для соединения 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. ");
}
}
Ответ 3
Приложения, ориентированные на Android 7.0 (уровень API 24) и выше, не получают эту трансляцию, если объявляют приемник вещания в своем манифесте. Приложения будут по-прежнему получать трансляции, если они регистрируют свой BroadcastReceiver с Context.registerReceiver(), и этот контекст все еще действителен.
https://developer.android.google.cn/reference/android/net/ConnectivityManager.html?hl=zh-cn#CONNECTIVITY_ACTION