tiempo reconoce porque pero para hoy funciona finalizo espera conexion conecta celular cayo carga activa android service wifi

android - reconoce - twitter no funciona 2018



Android: ¿detener/iniciar el servicio dependiendo del estado de WiFi? (4)

Aquí se proporciona más información útil: determinación y supervisión del estado de conectividad

En la aplicación de Android que estoy diseñando, mi servicio solo necesita ejecutarse cuando el dispositivo está conectado al enrutador (obviamente a través de WiFi). Soy realmente nuevo en Android, y lo que tengo hasta ahora me ha llevado para siempre a Achieve, así que realmente espero algunos consejos.

Mi servicio está configurado para iniciarse cuando el teléfono se enciende. Además, cuando se inicia la actividad, se verifica si el servicio se está ejecutando, y si no, lo inicia. Me pregunto qué código puedo poner en mi servicio para que se apague si se pierde el estado de WiFi y qué código necesito para que el servicio se inicie una vez que se active la conexión WiFi.

¡Gracias! :)


Como @Phil declaró, debe extender BroadcastReceiver y, en el método onReceive, iniciar o detener el servicio. Algo como:

class ConnectionChangeReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { ConnectivityManager connectivityManager = (ConnectivityManager) context .getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo activeNetInfo = connectivityManager.getActiveNetworkInfo(); if (activeNetInfo != null && activeNetInfo.getType() == ConnectivityManager.TYPE_WIFI) { //start service } else { //stop service } } }

Puede hacer de esto una clase privada de su actividad, y registrar el receptor en la creación de actividad, y anular el registro en la actividad destruir.


Para iniciar / detener su servicio cuando el estado de Wifi suplicante es correcto / nok:

  • registrar un BroadcastReceiver para recibir el cambio de estado WIFI con los intentos transmitidos
  • dentro de su BroadCastReceiver verifique la validez del intento y luego comience su servicio

WifiManager.SUPPLICANT_CONNECTION_CHANGE_ACTION su receptor de difusión para recibir WifiManager.SUPPLICANT_CONNECTION_CHANGE_ACTION . Agregue el permiso android.permission.CHANGE_WIFI_STATE o android.permission.ACCESS_NETWORK_STATE . No estoy seguro de si es necesario o no.

Entonces, un código de receptor de difusión de muestra podría ser:

public class MyWifiStatereceiver extends BroadcastReceiver { //Other stuff here @Override public void onReceive(Context context, Intent intent) { Intent srvIntent = new Intent(); srvIntent.setClass(MyService.class); boolean bWifiStateOk = false; if (WifiManager.SUPPLICANT_CONNECTION_CHANGE_ACTION.equals(intent.getAction()) { //check intents and service to know if all is ok then set bWifiStateOk accordingly bWifiStateOk = ... } else { return ; // do nothing ... we''re not in good intent context doh ! } if (bWifiStateOk) { context.startService(srvIntent); } else { context.stopService(srvIntent); } } }


Puede crear un BroadcastReceiver que maneje los cambios de conexión wifi.

Para ser más precisos, querrás crear una clase, digamos NetWatcher:

public class NetWatcher extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { //here, check that the network connection is available. If yes, start your service. If not, stop your service. ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo info = cm.getActiveNetworkInfo(); if (info != null) { if (info.isConnected()) { //start service Intent intent = new Intent(context, MyService.class); context.startService(intent); } else { //stop service Intent intent = new Intent(context, MyService.class); context.stopService(intent); } } } }

(cambiando MyService por el nombre de su servicio).

Además, en su AndroidManifest , debe agregar las siguientes líneas:

<receiver android:name="com.example.android.NetWatcher"> <intent-filter> <action android:name="android.net.conn.CONNECTIVITY_CHANGE"/> </intent-filter> </receiver>

(cambiando com.example.android por el nombre de su paquete).