I m tratando de registrar una emisión receptor para recibir actualizaciones cuando el gps cambia de estado.

Sin embargo, mi GpsChangeReceiver método onReceive no parecen ser llamado cuando el gps se modifica el estado de activado a desactivado o vice-versa.

Primero de todo, me voy a registrar el receptor de los:

GpsChangeReceiver m_gpsChangeReceiver = new GpsChangeReceiver();
this.registerReceiver(m_gpsChangeReceiver, new IntentFilter(LocationManager.PROVIDERS_CHANGED_ACTION));

Entonces, tengo mi Receptor GPS

public class GpsChangeReceiver extends BroadcastReceiver
{   
  @Override
  public void onReceive( Context context, Intent intent )
  {
    final LocationManager manager = (LocationManager) context.getSystemService( Context.LOCATION_SERVICE );
    if (manager.isProviderEnabled( LocationManager.GPS_PROVIDER ) ) {
        //do something
    }
    else
    {
        //do something else
    }
  }
}

Finalmente, mi contiene:

<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />

Cualquiera puede ver por qué el receptor gps nunca es llamado cuando puedo modificar su estado de la configuración del teléfono??

OriginalEl autor Dan Dinu | 2012-09-30

1 Comentario

  1. 15

    Hay dos maneras de registro de los receptores de difusión en Android:

    1. en el código (en su caso)
    2. en AndroidManifest.xml

    Permítanme explicar las diferencias.

    Caso 1 (Broadcast Receiver registrado en el código)

    Sólo recibirá las emisiones mientras contexto donde registró su receptor es vivo.
    Así que cuando actividad o aplicación es mató (dependiendo de donde usted haya registrado su receptor) que no recibir emisiones más.

    Supongo que registró la emisión receptor en el actividad de contexto que no es muy buen enfoque.
    Si desea registrar la emisión del receptor para su en el contexto de aplicación puede hacer algo como esto:

    getApplicationContext().registerReceiver(m_gpsChangeReceiver, new IntentFilter(LocationManager.PROVIDERS_CHANGED_ACTION));

    Caso 2 (Broadcast Receiver registrado en AndroidManifest.xml)

    Que va a recibir emisiones incluso cuando la aplicación está mató (sistema se despierta a su aplicación). Este es el enfoque adecuado cuando se desea recibir emisiones no importa si tu aplicación es ejecución.

    Agregar este receptor a su AndroidManifest.xml:

    <receiver android:name="com.yourpackage.NameOfYourBroadcastReceiver">
      <intent-filter>
        <action android:name="android.location.PROVIDERS_CHANGED" />
      </intent-filter>
    </receiver>

    EDICIÓN:
    Algunas transmisiones especiales (es decir, SCREEN_ON o SCREEN_OFF) debe ser registrado en el código (caso 1) de lo contrario no será entregado a su aplicación.

    disponible a partir de la API de 9+
    qué necesito para declarar un permiso para el caso #1? ¿La respuesta a la pregunta que se aplican a cualquier receptor que es registrado mediante programación (bluetooth, wifi) sólo para el on/off no realmente para acceder al hardware de la misma?

    OriginalEl autor stevo.mit

Dejar respuesta

Please enter your comment!
Please enter your name here