4

На API ниже Nougat вы можете просто объявить получателя в манифесте, который подписывается на CONNECTIVITY_CHANGES. Это позволило мне прослушать изменения сетевого подключения, включить или отключить подключение, а также разрешить мне выполнять задачи, даже если мое приложение не было запущено.Как вы обнаруживаете потерю сетевого соединения в Нуге, даже если ваше приложение не работает?

На Нуге это не представляется возможным. Я знаю, что JobScheduler в Nougat можно использовать для выполнения определенных задач в фоновом режиме, если есть сетевое подключение, но, похоже, нет возможности прослушивать потери сетевого соединения.

Другими словами, я хочу услышать, когда мой телефон потерял все возможности подключения (Wi-Fi, LTE и т. Д.) И сделать что-то в фоновом режиме, когда это произойдет. Возможно ли это в Нуге?

+0

пытались ли вы создать '' JobInfo' с setRequiredNetworkType (JobInfo.NETWORK_TYPE_NONE) ', а другой с' setRequiredNetworkType (JobInfo.NETWORK_TYPE_ANY) '? –

+0

вы можете протестовать осторожно - изменения в сотовых устройствах радио очень часто происходят - не ожидайте, что когда-либо остановится, это может привести к тому, что телефон пользователей будет очень занят. – apelsoczi

+0

@JaredRummler NETWORK_TYPE_NONE не делает то, что, по вашему мнению, делает. В основном это означает запустить эту работу независимо от того, какое подключение к сети у вас есть, а не значение: выполняйте эту работу только тогда, когда нет сети –

ответ

0

Вы можете использовать NetworkChangeReceiver

public class NetworkChangeReceiver extends BroadcastReceiver { 

private static final String LOG_TAG = "NetworkChangeReceiver"; 
private boolean isConnected = false; 
Context mContext; 

@Override 
public void onReceive(Context context, Intent intent) { 
    Log.v(LOG_TAG, "Receieved notification about network status"); 
    isNetworkAvailable(context); 
    mContext=context; 

} 

public boolean isNetworkAvailable(Context context) { 
    ConnectivityManager connectivity = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); 
    if (connectivity != null) { 
     NetworkInfo[] info = connectivity.getAllNetworkInfo(); 
     if (info != null) { 
      for (int i = 0; i < info.length; i++) { 
       if (info[i].getState() == NetworkInfo.State.CONNECTED) { 
        if (!isConnected) { 
         Log.v(LOG_TAG, "Now you are connected to Internet!"); 
         Toast.makeText(context, R.string.internet_available, Toast.LENGTH_SHORT).show(); 

         isConnected = true; 


        } 
        return true; 
       } 
      } 
     } 
    } 
    Log.v(LOG_TAG, "You are not connected to Internet!"); 
    Toast.makeText(context, R.string.internet_not_available, Toast.LENGTH_SHORT).show(); 




    isConnected = false; 
    return false; 
} 
+0

зарегистрировать его вручную на nougat + –

+1

@ f.khantsis. Если это должно произойти в фоновом режиме, без открытия активности, где вы это сделаете? –

+0

@the_gesslar использовать его внутри вашего класса приложения. –