CONNECTIVITY_CHANGE obsoleta en el objetivo de Android N

Estoy recibiendo una advertencia de la declaración de difusor de Broadcast Receiver.

<!-- NETWORK RECEIVER... --> <receiver android:name=".utils.NetworkUtils" > <intent-filter> <action android:name="android.net.conn.CONNECTIVITY_CHANGE" /> </intent-filter> </receiver> 

ADVERTENCIA:

Declarar un receptor de difusión para android.net.conn.CONNECTIVITY_CHANGE está obsoleto para aplicaciones orientadas a N y superiores. En general, las aplicaciones no deben confiar en esta difusión y en su lugar utilizar JobScheduler o GCMNetworkManager.

¿Hay alguna otra manera de usarlo sin métodos obsoletos?

Tuve el mismo problema, hice algo así. Funcionó para mí, espero que ayude.

 public class NewActivity extends AppCompatActivity { final static String CONNECTIVITY_ACTION = "android.net.conn.CONNECTIVITY_CHANGE"; IntentFilter intentFilter; MyReceiver receiver; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_new); intentFilter = new IntentFilter(); intentFilter.addAction(CONNECTIVITY_ACTION); receiver = new MyReceiver(); if(checkForInternet()){ loadData(); }else{ updateUI(); } } @Override protected void onResume() { super.onResume(); registerReceiver(receiver, intentFilter); } @Override protected void onPause() { super.onPause(); unregisterReceiver(receiver); } // Self explanatory method public boolean checkForInternet() { ConnectivityManager cm = (ConnectivityManager) this.getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo activeNetwork = cm.getActiveNetworkInfo(); return activeNetwork != null && activeNetwork.isConnectedOrConnecting(); } void loadData(){ // do sth } void updateUI(){ // No internet connection, update the ui and warn the user } private class MyReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { String actionOfIntent = intent.getAction(); boolean isConnected = checkForInternet(); if(actionOfIntent.equals(CONNECTIVITY_ACTION)){ if(isConnected){ loadData(); }else{ updateUI(); } } } } } 

No agregue el receptor en el manifiesto para que sólo viva en esta actividad.

El asesoramiento oficial de Google es cambiar a JobScheduler . Dado que este está disponible sólo desde el nivel API 21 y superior, es un no-go para los dispositivos más antiguos.

Por suerte, la gente de Evernote crear una versión de compatibilidad hacia atrás de que: https://github.com/evernote/android-job

La advertencia parece contener la pista que necesita para utilizar el planificador de trabajos. La intención aquí es que las aplicaciones no comuniquen las intenciones al sistema con respecto a las acciones que quieren hacer cuando la aplicación recibe conectividad. El planificador de trabajos obviamente evita estos problemas y permite a Android procesar las solicitudes, diferirlas y así sucesivamente.

La advertencia es que usted tendrá que implementar hacer el trabajo en ambos sentidos ya que el planificador de trabajos sólo está disponible desde Android 5.0. Tal vez usted puede utilizar las bibliotecas que cambiarán a la implementación nativa del planificador de tareas, otra respuesta enumeró uno de ellos.

  • Android: "La acción completa" sigue mostrándose incluso después de seleccionar "Siempre"
  • ¿Cuáles son las formas alternativas de lanzar mi aplicación?
  • Cómo recibir un archivo usando NFC (Android Beam) en Android
  • IntentService no se está llamando
  • ¿Por qué no se lanza mi actividad por URL?
  • Integración de la aplicación con los resultados de búsqueda de Google y Chrome
  • Cant "addAction" a IntentFilter en android
  • Spotify intención en android?
  • Android PhoneGap intento de filtro, el navegador de volver a ejecutar la aplicación?
  • Cómo corregir Advertencia de pelusa de SMS BroadcastReceiver sin protección
  • Cómo compartir imagen + texto juntos usando ACTION_SEND en android?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.