tutorial start sendbroadcast registerreceiver oreo example connectivity_change android broadcastreceiver

sendbroadcast - start broadcast receiver android



java.lang.InstantiationException: la clase no tiene constructor de argumentos cero (4)

Estoy tratando de usar un BroadcastReceiver como una clase interna para rastrear el estado de la red, pero obtuve la excepción en el título. ¿Qué debo hacer para solucionar este problema?

public class NetworkChangeReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { final ConnectivityManager connMgr = (ConnectivityManager) context .getSystemService(Context.CONNECTIVITY_SERVICE); final android.net.NetworkInfo wifi = connMgr.getNetworkInfo(ConnectivityManager.TYPE_WIFI); final android.net.NetworkInfo mobile = connMgr.getNetworkInfo(ConnectivityManager.TYPE_MOBILE); if (wifi.isAvailable() || mobile.isAvailable()) { setupData(); Log.d("Netowk Available ", "Flag No 1"); } } }


Tu

El receptor de difusión interno debe ser estático (para ser registrado a través de Manifest)

O

El receptor de difusión no estática debe estar registrado y no registrado dentro de la clase principal

para esto.

Estaba usando un receptor de transmisión interno, sin registrarlo dentro de la clase. O haga que sea estático y se registre en Manifest, o haga que no sea estático y que se registre y anule el registro dentro de la clase principal.


Una clase interna no estática no se puede registrar a través del AndroidManifest.xml . Tu también puedes:

Regístrelo dinámicamente como se describe en este hilo y elimine el constructor vacío.

O,

Convierta su clase interna en estática y regístrela en AndroidManifext.xml .


e ~~ Acabo de encontrar ese problema, y ​​refactorizo ​​la clase NetworkChangeReceiver a otro lugar


simplemente haga que su clase receptora sea estática como:

public [static] class ReceiverClass extends BroadcastReceiver