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:
- Android - BroadcastReceiver no recibe intenciones personalizadas
- IntentFilter en NFC - Xamarin - C #
- ¿Cómo comprobar si una intención puede ser manejada de alguna actividad?
- ¿Por qué Filtros de Intención de Etiqueta?
- Abrir URL de Facebook con la aplicación de Facebook
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?
- Abrir aplicación de URL funciona en Firefox para Android pero no en Google Chrome
- BroadcastReceiver - onReceive Not Being Called
- Filtro de intenciones para exploradores de archivos comunes
- Filtro de intenciones usando path, pathPrefix o pathPattern
- El redirector de Facebook del navegador de Android no siempre intenta activar la URL
- PACKAGE_REMOVED y luego PACKAGE_ADDED se disparan junto con PACKAGE_REPLACED Intent Action
- Abrir la aplicación de Android desde la URL mediante el intento de filtro no funciona
- Diseño de la aplicación para Android: escribe el filtro de intenciones correcto
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.
- No se pudo conectar con el cliente de API de Google
- Android app falla en cambiar entre modus personales y de trabajo en Samsung Knox